#include "server.h" #include server::server(std::string address, 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() { boost::asio::spawn(_io_service, [&](boost::asio::yield_context yield) { try { for (;;) { session *s = new session(_io_service, &_pool); _acceptor->async_accept(s->socket(), yield); _sessions.insert(s); s->start(); } } catch (boost::system::system_error& ex) { std::cout << "server exception: " << ex.what() << std::endl; } }); _io_service.run(); std::cout << "after ioservice run" << std::endl; std::for_each(_sessions.begin(), _sessions.end(), [](session* s){ delete s; }); _sessions.clear(); } server::~server() { std::cout << "server destructor" << std::endl; delete _acceptor; } void server::stop() { _io_service.post([&]{ _acceptor->close(); std::for_each(_sessions.begin(), _sessions.end(), [](session* s){ s->stop(); }); _pool.wait_all(); std::cout << "stop exited" << std::endl; }); }