#ifndef CONNECTION_H #define CONNECTION_H #include "declarations.h" #include class Connection : public std::enable_shared_from_this, boost::noncopyable { typedef std::function ErrorCallback; typedef std::function RecvCallback; enum { READ_TIMEOUT = 10, WRITE_TIMEOUT = 10 }; public: Connection(); static void init(); static void poll(); static void terminate(); void connect(const std::string& host, uint16 port, const SimpleCallback& connectCallback); void close(); void write(uint8* buffer, uint16 size); void read(uint16 bytes, const RecvCallback& callback); void setErrorCallback(const ErrorCallback& errorCallback) { m_errorCallback = errorCallback; } bool isConnected() const { return m_connected; } private: void onResolve(const boost::system::error_code& error, asio::ip::tcp::resolver::iterator endpointIterator); void onConnect(const boost::system::error_code& error); void onWrite(const boost::system::error_code& error, size_t); void onRecv(const boost::system::error_code& error); void onTimeout(const boost::system::error_code& error); void handleError(const boost::system::error_code& error); SimpleCallback m_connectCallback; ErrorCallback m_errorCallback; RecvCallback m_recvCallback; asio::deadline_timer m_readTimer; asio::deadline_timer m_writeTimer; asio::ip::tcp::resolver m_resolver; asio::ip::tcp::socket m_socket; uint8 m_recvBuffer[65538]; uint16 m_recvSize; bool m_connected; }; #endif