#ifndef _SESSION_H_ #define _SESSION_H_ #include "threadpool.h" #include #include class session { private: typedef boost::asio::ip::tcp tcp; private: tcp::socket _socket; char _data[128]; threadpool* _pool; public: session() = delete; session(session&) = delete; session(boost::asio::io_service& io_service, threadpool* pool); ~session(); void start(); void stop(); tcp::socket& socket(); template R async_call(std::function func, CompletionToken&& token) { using namespace boost::asio; BOOST_ASIO_HANDLER_TYPE(CompletionToken, void(R)) handler(std::forward(token)); async_result result(handler); _pool->add_task([this, handler, &func]{ _socket.get_io_service().dispatch(std::bind(handler, func())); }); return result.get(); } }; #endif // _SESSION_H_