17 #ifndef DEFAULTOPERATIONTCPCHANNEL_HPP_
18 #define DEFAULTOPERATIONTCPCHANNEL_HPP_
22 #ifdef KAA_DEFAULT_TCP_CHANNEL
26 #include <boost/asio.hpp>
41 class DefaultOperationTcpChannel :
public IDataChannel {
43 DefaultOperationTcpChannel(IKaaChannelManager *channelManager,
const KeyPair& clientKeys);
44 virtual ~DefaultOperationTcpChannel();
47 virtual void syncAll();
50 virtual const std::string& getId()
const {
return CHANNEL_ID; }
51 virtual ChannelType getChannelType()
const {
return ChannelType::KAATCP; }
53 virtual void setMultiplexer(IKaaDataMultiplexer *multiplexer);
54 virtual void setDemultiplexer(IKaaDataDemultiplexer *demultiplexer);
57 virtual void shutdown();
59 virtual void resume();
61 virtual const std::map<TransportType, ChannelDirection>& getSupportedTransportTypes()
const {
return SUPPORTED_TYPES; }
68 connectivityChecker_= checker;
71 void onReadEvent(
const boost::system::error_code& err);
72 void onPingTimeout(
const boost::system::error_code& err);
74 void onConnack(
const ConnackMessage& message);
75 void onDisconnect(
const DisconnectMessage& message);
76 void onKaaSync(
const KaaSyncResponse& message);
77 void onPingResponse();
79 void openConnection();
80 void closeConnection();
81 void onServerFailed();
84 static const std::uint16_t PING_TIMEOUT;
85 static const std::uint16_t RECONNECT_TIMEOUT;
87 boost::system::error_code sendKaaSync(
const std::map<TransportType, ChannelDirection>& transportTypes);
88 boost::system::error_code sendConnect();
89 boost::system::error_code sendDisconnect();
90 boost::system::error_code sendPingRequest();
91 boost::system::error_code sendData(
const IKaaTcpRequest& request);
93 void readFromSocket();
101 static const std::string CHANNEL_ID;
102 static const std::map<TransportType, ChannelDirection> SUPPORTED_TYPES;
103 static const std::uint16_t THREADPOOL_SIZE = 2;
105 std::list<TransportType> ackTypes_;
108 boost::asio::io_service io_;
109 boost::asio::io_service::work work_;
110 boost::asio::ip::tcp::socket sock_;
111 boost::asio::deadline_timer pingTimer_;
112 boost::asio::deadline_timer reconnectTimer_;
113 boost::asio::streambuf responseBuffer_;
114 std::array<std::thread, THREADPOOL_SIZE> channelThreads_;
118 bool isFirstResponseReceived_;
119 bool isPendingSyncRequest_;
123 IKaaDataMultiplexer *multiplexer_;
124 IKaaDataDemultiplexer *demultiplexer_;
125 IKaaChannelManager *channelManager_;
127 KaaTcpResponseProcessor responsePorcessor;
128 std::unique_ptr<RsaEncoderDecoder> encDec_;
std::pair< Botan::MemoryVector< std::uint8_t >, std::string > KeyPair
std::shared_ptr< IConnectivityChecker > ConnectivityCheckerPtr
std::shared_ptr< IServerInfo > IServerInfoPtr
std::shared_ptr< KaaTcpServerInfo > OperationServerKaaTcpInfoPtr
#define KAA_MUTEX_DECLARE(name)