Subversion Repositories HomeAutomation

Rev

Rev 1939 | Go to most recent revision | Blame | Last modification | View Log | SVN | RSS feed

  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.  
  80.   std::cout << str << std::endl;
  81.  
  82.   //LOG.Info("Received: \"" + str + "\" from client " + boost::lexical_cast<std::string>(client_id) + " on server " + boost::lexical_cast<std::string>(server_id));
  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
  114.