42 lines
869 B
C++
42 lines
869 B
C++
#include "server.h"
|
|
#include <boost/asio/yield.hpp>
|
|
#include <iostream>
|
|
|
|
server::server(const std::string& address, const std::string& port)
|
|
{
|
|
tcp::resolver resolver(_io_service);
|
|
tcp::resolver::query query(address, port);
|
|
_acceptor = new tcp::acceptor(_io_service, *resolver.resolve(query));
|
|
}
|
|
|
|
void server::run()
|
|
{
|
|
accept();
|
|
_io_service.run();
|
|
}
|
|
|
|
void server::accept(boost::system::error_code ec)
|
|
{
|
|
if(!ec)
|
|
{
|
|
reenter(this) for(;;)
|
|
{
|
|
_session = new session(_io_service);
|
|
yield _acceptor->async_accept(_session->_socket, std::bind(&server::accept, this, std::placeholders::_1));
|
|
std::cout << "new connection started" << std::endl;
|
|
_session->start();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
std::cout << "error: " << ec.message() << std::endl;
|
|
}
|
|
}
|
|
|
|
server::~server() {
|
|
if(_socket) delete _socket;
|
|
if(_acceptor) delete _acceptor;
|
|
}
|
|
|
|
#include <boost/asio/unyield.hpp>
|