#ifndef _SESSION_H_ #define _SESSION_H_ #include "threadpool.h" #include class session: boost::asio::coroutine { private: typedef boost::asio::ip::tcp tcp; friend class server; private: tcp::socket _socket; char _data[128]; threadpool _pool; // "local" variables std::future _fut; public: session() = delete; session(session&) = delete; session(boost::asio::io_service& io_service); void start(boost::system::error_code ec = boost::system::error_code(), std::size_t bytes_transferred = 0); template std::future call_async(std::function func) { return _pool.add_task([this, &func]{ R result = func(); _socket.get_io_service().dispatch(std::bind(&session::start, this, boost::system::error_code(), 0)); return result; }); } }; #endif // _SESSION_H_