#include "session.h" #include #include session::session(boost::asio::io_service &io_service): boost::asio::coroutine(), _socket(io_service) { } session::~session() { std::cout << "session destructor" << std::endl; } void session::start(boost::system::error_code ec, std::size_t bytes_transferred) { if(!ec) { reenter(this) for(;;) { std::memset(_data, 0, 128); yield _socket.async_read_some(boost::asio::buffer(_data, 128), std::bind(&session::start, this, std::placeholders::_1, std::placeholders::_2)); std::cout << "async_read " << bytes_transferred << " bytes" << std::endl; std::cout << "number: " << std::atoi(_data) << std::endl; // yield _pool.add_task([this]{ // return 42; // }); yield _socket.async_write_some(boost::asio::buffer(_data, 128), std::bind(&session::start, this, std::placeholders::_1, std::placeholders::_2)); std::cout << "async_write" << std::endl; } } else { std::cout << "error: " << ec.message() << std::endl; delete this; } } #include