#ifndef SESSION_H #define SESSION_H #include #include #include #include #include #include #include namespace DataExporter_ns { class Session : public Tango::LogAdapter { public: //------------------------------------------------------------------------------ // [Public] Shared pointer typedef //------------------------------------------------------------------------------ typedef boost::shared_ptr SP; protected: //------------------------------------------------------------------------------ // [Protected] Constructor destructor deleter //------------------------------------------------------------------------------ Session(Tango::DeviceImpl*, Configuration::SP, DBManager::SP, boost::shared_ptr); virtual ~Session(); public: //------------------------------------------------------------------------------ // [Public] Incoming connection methods //------------------------------------------------------------------------------ virtual boost::asio::ip::tcp::socket& getSocket() = 0; virtual void start() = 0; protected: //------------------------------------------------------------------------------ // [Protected] Read request header methods //------------------------------------------------------------------------------ virtual void startReadRequestHeader() = 0; virtual void handleReadRequestHeader(const boost::system::error_code&); //------------------------------------------------------------------------------ // [Protected] Read request body methods //------------------------------------------------------------------------------ virtual void startReadRequestBody(boost::uint32_t) = 0; virtual void handleReadRequestBody(const boost::system::error_code&); //------------------------------------------------------------------------------ // [Protected] Write response methods //------------------------------------------------------------------------------ virtual void startWriteResponse() = 0; virtual void handleWriteResponse(const boost::system::error_code&); //------------------------------------------------------------------------------ // [Protected] Write data methods //------------------------------------------------------------------------------ virtual void startWriteData() = 0; virtual void handleWriteData(const boost::system::error_code&); //------------------------------------------------------------------------------ // [Protected] Encode decode header methods //------------------------------------------------------------------------------ virtual void encodeHeader(std::vector&, boost::uint32_t) throw(std::runtime_error); virtual boost::uint32_t decodeHeader(std::vector&) throw(std::runtime_error); //------------------------------------------------------------------------------ // [Protected] Class variables //------------------------------------------------------------------------------ //Configuration parameters shared pointer Configuration::SP m_configuration_sp; //Protocol manager class shared pointer ProtocolManager::SP m_protocolManager_sp; //Synchronization mechanism boost::asio::io_service::strand m_strand; //Header size written on socket const unsigned int HEADER_SIZE = 4; //Binary buffer for read data std::vector m_readBuff; //Address and port of remote endpoint std::string m_remoteEndpoint; const int BUFFER_SIZE = 1024; std::ifstream m_inputStream; int m_inputStreamSize; }; } //End of namespace #endif /* SESSION_H */