ComSDK
 Указатель Классы Пространства имен Функции Переменные Определения типов Перечисления Элементы перечислений Друзья Группы Страницы
node_connection.h
1 //========================================================================
2 #ifndef comfrm_cls_NodeConnectionH
3 #define comfrm_cls_NodeConnectionH
4 //========================================================================
5 #include "node_protocol.h"
6 
7 #include <boost/asio.hpp>
8 #include <functional>
9 //========================================================================
10 namespace com {
11  namespace interproc {
12  class NodeConnection : public std::enable_shared_from_this< NodeConnection > // to allow the pointer to stay alive
13  {
14  enum NodeConnectionState
15  {
16  ncsNotConnected,
17  ncsConnected,
18  ncsReadyForMessage,
19  };
20 
21  public:
22  typedef std::function< void (std::shared_ptr< NodeConnection >) > OnSocketClosedClb;
23 
24  public:
25  NodeConnection(const NodeConnection&) = delete;
26  ~NodeConnection();
27 
28  static std::shared_ptr< NodeConnection > createConnection(const boost::asio::ip::address& p_ipAddr,
29  boost::asio::io_service& p_ioService,
30  std::function< void (std::shared_ptr< NodeConnection >, std::vector< char >&) > p_msgCallback,
31  OnSocketClosedClb p_socketClosedClb);
32  static std::shared_ptr< NodeConnection > createServerConnection(boost::asio::io_service& p_ioService,
33  std::function< void (std::shared_ptr< NodeConnection >, std::vector< char >&) > p_msgCallback,
34  OnSocketClosedClb p_socketClosedClb);
35 
36  void prepareToRead();
37  void send(const std::vector< char >& p_data);
38  NodeConnectionState getState() const;
39  boost::asio::ip::address getIpAddr() const;
40  boost::asio::ip::tcp::socket& getSocket();
41  void setSocketClosedCallback(OnSocketClosedClb p_clb);
42 
43  private:
44  NodeConnection(boost::asio::io_service& p_ioService,
45  std::function< void (std::shared_ptr< NodeConnection >, std::vector< char >&) > p_msgCallback,
46  OnSocketClosedClb p_socketClosedClb); // строить этот объект можно только через instance
47  void connect(const boost::asio::ip::address& p_ipAddr);
48  //void onConnect(const boost::system::error_code& p_error);
49  void onRead(const boost::system::error_code& p_error, std::size_t p_bytesTransferred);
50  //void onWrite(const boost::system::error_code& p_error, std::size_t p_bytesTransferred);
51  void processReceivedBytes(std::vector< char >& p_bytes);
52  bool fillMessageBuffer(std::vector< char >& p_bytes, size_t& o_restBytesCount); // возвращает false, если нужно вычитать больше байт
53  void setState(NodeConnectionState p_state);
54  void stop();
55 
56  protected:
57  boost::asio::ip::tcp::socket m_socket;
58  NodeConnectionState m_state;
59  std::vector< char > m_readBuffer;
60  //std::vector< char > m_writeBuffer;
61  std::vector< char > m_messageBuffer;
62  // std::function< void (std::shared_ptr< cls_AnyMap >, std::string ) > m_anyMapCallback;
63  // std::function< void (cls_NodeRegistration) > m_regCallback;
64  std::function< void (std::shared_ptr< NodeConnection >, std::vector< char >&) > m_msgCallback;
65  OnSocketClosedClb m_socketClosedCallback;
66  NodeProtocol m_protocol;
67  };
68  }
69 }
70 
71 //========================================================================
72 #endif
73 //========================================================================
Definition: node_protocol.h:41
Definition: node_connection.h:12