Subversion Repositories HomeAutomation

Rev

Details | Last modification | View Log | SVN | RSS feed

Rev Author Line No. Line
1939 runge 1
/*
2
 *
3
 *  Copyright (C) 2012  Mattias Runge
4
 *
5
 *  This program is free software; you can redistribute it and/or modify
6
 *  it under the terms of the GNU General Public License as published by
7
 *  the Free Software Foundation; either version 2 of the License, or
8
 *  (at your option) any later version.
9
 *
10
 *  This program is distributed in the hope that it will be useful,
11
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 *  GNU General Public License for more details.
14
 *
15
 *  You should have received a copy of the GNU General Public License along
16
 *  with this program; if not, write to the Free Software Foundation, Inc.,
17
 *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
 *
19
 */
20
 
21
#include "Manager.h"
22
 
23
#include <boost/lexical_cast.hpp>
24
#include <boost/algorithm/string/trim.hpp>
25
 
26
#include "net/Manager.h"
27
 
28
namespace atom {
29
namespace mbb {
30
 
31
Manager::Pointer Manager::instance_;
32
 
33
logging::Logger Manager::LOG("mbb::Manager");
34
 
35
Manager::Manager(unsigned int port)
36
{
37
  try
38
  {
39
    this->server_id_ = net::Manager::Instance()->StartServer(net::PROTOCOL_TCP, port);
40
    LOG.Info("Started TCP server on port " + boost::lexical_cast<std::string>(port) + ".");
41
    LOG.Debug("Server id is " + boost::lexical_cast<std::string>(this->server_id_) + ".");
42
  }
43
  catch (std::runtime_error& e)
44
  {
45
    LOG.Error(e.what());
46
  }
47
}
48
 
49
Manager::Pointer Manager::Instance()
50
{
51
  return Manager::instance_;
52
}
53
 
54
void Manager::Create(unsigned int port)
55
{
56
  Manager::instance_ = Manager::Pointer(new Manager(port));
57
}
58
 
59
void Manager::Delete()
60
{
61
  Manager::instance_.reset();
62
}
63
 
64
Manager::~Manager()
65
{
66
  net::Manager::Instance()->StopServer(this->server_id_);
67
  this->server_id_ = 0;
68
}
69
 
70
 
71
void Manager::SlotOnNewDataHandler(net::ClientId client_id, net::ServerId server_id, common::Byteset data)
72
{
73
  if (server_id != this->server_id_)
74
  {
75
    return;
76
  }
77
 
78
  std::string str = data.ToCharString();
79
 
1945 runge 80
  std::cout << str << std::endl;
1939 runge 81
 
1945 runge 82
  //LOG.Info("Received: \"" + str + "\" from client " + boost::lexical_cast<std::string>(client_id) + " on server " + boost::lexical_cast<std::string>(server_id));
1939 runge 83
 
84
  if (str == "q" || str == "quit")
85
  {
86
    LOG.Info("Client " + boost::lexical_cast<std::string>(client_id) + " has requested to be disconnected.");
87
    net::Manager::Instance()->Disconnect(client_id);
88
  }
89
}
90
 
91
void Manager::SlotOnNewStateHandler(net::ClientId client_id, net::ServerId server_id, net::ClientState client_state)
92
{
93
  if (server_id != this->server_id_)
94
  {
95
    return;
96
  }
97
 
98
  if (client_state == net::CLIENT_STATE_DISCONNECTED)
99
  {
100
    LOG.Info("Client " + boost::lexical_cast<std::string>(client_id) + " has disconnected.");
101
  }
102
  else if (client_state == net::CLIENT_STATE_CONNECTED)
103
  {
104
    LOG.Info("Client " + boost::lexical_cast<std::string>(client_id) + " has connected.");
105
  }
106
  else
107
  {
108
    LOG.Debug("Got state: " + boost::lexical_cast<std::string>((int)client_state));
109
  }
110
}
111
 
112
}; // namespace mbb
113
}; // namespace atom