17 #ifndef DEFAULTOPERATIONTCPCHANNEL_HPP_
18 #define DEFAULTOPERATIONTCPCHANNEL_HPP_
27 #include <boost/asio.hpp>
59 virtual const std::string&
getId()
const {
return CHANNEL_ID; }
78 return SUPPORTED_TYPES;
86 failoverStrategy_ = strategy;
90 connectivityChecker_= checker;
93 void onReadEvent(
const boost::system::error_code& err);
107 static const std::uint16_t PING_TIMEOUT;
108 static const std::uint16_t CHANNEL_TIMEOUT;
109 static const std::uint16_t CONN_ACK_TIMEOUT;
110 static const std::uint16_t RECONNECT_TIMEOUT;
112 boost::system::error_code sendKaaSync(
const std::map<TransportType, ChannelDirection>& transportTypes);
113 boost::system::error_code sendConnect();
114 boost::system::error_code sendDisconnect();
115 boost::system::error_code sendPingRequest();
116 boost::system::error_code sendData(
const IKaaTcpRequest& request);
118 void readFromSocket();
120 void setConnAckTimer();
122 void createThreads();
127 static const std::string CHANNEL_ID;
128 static const std::map<TransportType, ChannelDirection> SUPPORTED_TYPES;
129 static const std::uint16_t TIMER_THREADPOOL_SIZE = 1;
130 static const std::uint16_t SOCKET_THREADPOOL_SIZE = 1;
131 static const std::uint32_t KAA_PLATFORM_PROTOCOL_AVRO_ID;
133 std::list<TransportType> ackTypes_;
136 boost::asio::io_service io_;
137 boost::asio::io_service socketIo_;
138 boost::asio::io_service::work work_;
139 boost::asio::io_service::work socketWork_;
141 std::unique_ptr<boost::asio::ip::tcp::socket> sock_;
142 boost::asio::deadline_timer pingTimer_;
143 boost::asio::deadline_timer connAckTimer_;
147 std::unique_ptr<boost::asio::streambuf> responseBuffer_;
148 std::array<std::thread, TIMER_THREADPOOL_SIZE> timerThreads_;
149 std::array<std::thread, SOCKET_THREADPOOL_SIZE> channelThreads_;
153 bool isFirstResponseReceived_;
154 bool isPendingSyncRequest_;
157 bool isFailoverInProgress_;
162 std::shared_ptr<IPTransportInfo> currentServer_;
164 std::unique_ptr<RsaEncoderDecoder> encDec_;
166 KAA_MUTEX_DECLARE(channelGuard_);
void onConnack(const ConnackMessage &message)
std::shared_ptr< IConnectivityChecker > ConnectivityCheckerPtr
std::shared_ptr< IFailoverStrategy > IFailoverStrategyPtr
virtual void setMultiplexer(IKaaDataMultiplexer *multiplexer)
virtual void setServer(ITransportConnectionInfoPtr server)
virtual void syncAck(TransportType type)
void onServerFailed(KaaFailoverReason failoverReason=KaaFailoverReason::NO_CONNECTIVITY)
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)
virtual void setFailoverStrategy(IFailoverStrategyPtr strategy)
DefaultOperationTcpChannel(IKaaChannelManager *channelManager, const KeyPair &clientKeys, IKaaClientContext &context, IKaaClient *client)
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
virtual void sync(TransportType type)
virtual ~DefaultOperationTcpChannel()
void onDisconnect(const DisconnectMessage &message)
void onConnAckTimeout(const boost::system::error_code &err)
void onKaaSync(const KaaSyncResponse &message)
std::shared_ptr< ITransportConnectionInfo > ITransportConnectionInfoPtr