17 #ifndef DEFAULTOPERATIONTCPCHANNEL_HPP_
18 #define DEFAULTOPERATIONTCPCHANNEL_HPP_
22 #ifdef KAA_DEFAULT_TCP_CHANNEL
28 #include <boost/asio.hpp>
46 class DefaultOperationTcpChannel :
public IDataChannel {
48 DefaultOperationTcpChannel(IKaaChannelManager *channelManager,
const KeyPair& clientKeys);
49 virtual ~DefaultOperationTcpChannel();
52 virtual void syncAll();
55 virtual const std::string& getId()
const {
return CHANNEL_ID; }
57 virtual TransportProtocolId getTransportProtocolId()
const {
61 virtual void setMultiplexer(IKaaDataMultiplexer *multiplexer);
62 virtual void setDemultiplexer(IKaaDataDemultiplexer *demultiplexer);
65 virtual void shutdown();
67 virtual void resume();
69 virtual const std::map<TransportType, ChannelDirection>& getSupportedTransportTypes()
const {
70 return SUPPORTED_TYPES;
78 connectivityChecker_= checker;
81 void onReadEvent(
const boost::system::error_code& err);
82 void onPingTimeout(
const boost::system::error_code& err);
84 void onConnack(
const ConnackMessage& message);
85 void onDisconnect(
const DisconnectMessage& message);
86 void onKaaSync(
const KaaSyncResponse& message);
87 void onPingResponse();
89 void openConnection();
90 void closeConnection();
91 void onServerFailed();
94 static const std::uint16_t PING_TIMEOUT;
95 static const std::uint16_t RECONNECT_TIMEOUT;
97 boost::system::error_code sendKaaSync(
const std::map<TransportType, ChannelDirection>& transportTypes);
98 boost::system::error_code sendConnect();
99 boost::system::error_code sendDisconnect();
100 boost::system::error_code sendPingRequest();
101 boost::system::error_code sendData(
const IKaaTcpRequest& request);
103 void readFromSocket();
106 void createThreads();
111 static const std::string CHANNEL_ID;
112 static const std::map<TransportType, ChannelDirection> SUPPORTED_TYPES;
113 static const std::uint16_t THREADPOOL_SIZE = 2;
114 static const std::uint32_t KAA_PLATFORM_PROTOCOL_AVRO_ID;
116 std::list<TransportType> ackTypes_;
119 boost::asio::io_service io_;
120 boost::asio::io_service::work work_;
121 boost::asio::ip::tcp::socket sock_;
122 boost::asio::deadline_timer pingTimer_;
123 boost::asio::deadline_timer reconnectTimer_;
124 boost::asio::streambuf responseBuffer_;
125 std::array<std::thread, THREADPOOL_SIZE> channelThreads_;
129 bool isFirstResponseReceived_;
130 bool isPendingSyncRequest_;
134 IKaaDataMultiplexer *multiplexer_;
135 IKaaDataDemultiplexer *demultiplexer_;
136 IKaaChannelManager *channelManager_;
137 std::shared_ptr<IPTransportInfo> currentServer_;
138 KaaTcpResponseProcessor responsePorcessor;
139 std::unique_ptr<RsaEncoderDecoder> encDec_;
std::shared_ptr< IConnectivityChecker > ConnectivityCheckerPtr
static const TransportProtocolId TCP_TRANSPORT_ID
#define KAA_MUTEX_DECLARE(name)
std::shared_ptr< ITransportConnectionInfo > ITransportConnectionInfoPtr