42 lines
1.1 KiB
C++
42 lines
1.1 KiB
C++
#include "session.h"
|
|
|
|
#include <iostream>
|
|
#include <boost/asio/yield.hpp>
|
|
|
|
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<int>.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 <boost/asio/unyield.hpp>
|