17 #ifndef DEFAULTOPERATIONTCPCHANNEL_HPP_
18 #define DEFAULTOPERATIONTCPCHANNEL_HPP_
26 #include <boost/asio.hpp>
53 virtual const std::string&
getId()
const {
return CHANNEL_ID; }
72 return SUPPORTED_TYPES;
80 connectivityChecker_= checker;
83 void onReadEvent(
const boost::system::error_code& err);
96 static const std::uint16_t PING_TIMEOUT;
97 static const std::uint16_t RECONNECT_TIMEOUT;
99 boost::system::error_code sendKaaSync(
const std::map<TransportType, ChannelDirection>& transportTypes);
100 boost::system::error_code sendConnect();
101 boost::system::error_code sendDisconnect();
102 boost::system::error_code sendPingRequest();
103 boost::system::error_code sendData(
const IKaaTcpRequest& request);
105 void readFromSocket();
108 void createThreads();
113 static const std::string CHANNEL_ID;
114 static const std::map<TransportType, ChannelDirection> SUPPORTED_TYPES;
115 static const std::uint16_t THREADPOOL_SIZE = 2;
116 static const std::uint32_t KAA_PLATFORM_PROTOCOL_AVRO_ID;
118 std::list<TransportType> ackTypes_;
121 boost::asio::io_service io_;
122 boost::asio::io_service::work work_;
123 boost::asio::ip::tcp::socket sock_;
124 boost::asio::deadline_timer pingTimer_;
125 boost::asio::deadline_timer reconnectTimer_;
126 boost::asio::streambuf responseBuffer_;
127 std::array<std::thread, THREADPOOL_SIZE> channelThreads_;
131 bool isFirstResponseReceived_;
132 bool isPendingSyncRequest_;
139 std::shared_ptr<IPTransportInfo> currentServer_;
141 std::unique_ptr<RsaEncoderDecoder> encDec_;
143 KAA_MUTEX_DECLARE(channelGuard_);
void onConnack(const ConnackMessage &message)
std::shared_ptr< IConnectivityChecker > ConnectivityCheckerPtr
virtual void setMultiplexer(IKaaDataMultiplexer *multiplexer)
virtual void setServer(ITransportConnectionInfoPtr server)
virtual void syncAck(TransportType type)
static const TransportProtocolId TCP_TRANSPORT_ID
virtual void setConnectivityChecker(ConnectivityCheckerPtr checker)
virtual ServerType getServerType() const
virtual ITransportConnectionInfoPtr getServer()
virtual const std::string & getId() const
virtual void setDemultiplexer(IKaaDataDemultiplexer *demultiplexer)
void onReadEvent(const boost::system::error_code &err)
virtual const std::map< TransportType, ChannelDirection > & getSupportedTransportTypes() const
void onPingTimeout(const boost::system::error_code &err)
virtual TransportProtocolId getTransportProtocolId() const
DefaultOperationTcpChannel(IKaaChannelManager *channelManager, const KeyPair &clientKeys)
virtual void sync(TransportType type)
virtual ~DefaultOperationTcpChannel()
void onDisconnect(const DisconnectMessage &message)
void onKaaSync(const KaaSyncResponse &message)
std::shared_ptr< ITransportConnectionInfo > ITransportConnectionInfoPtr