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