/* * NetworkServer.cpp, part of VCMI engine * * Authors: listed in file AUTHORS in main folder * * License: GNU General Public License v2.0 or later * Full text of license available in license.txt file, in main folder * */ #include "StdInc.h" #include "NetworkServer.h" #include "NetworkConnection.h" VCMI_LIB_NAMESPACE_BEGIN void NetworkServer::start(uint16_t port) { io = std::make_shared(); acceptor = std::make_shared(*io, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)); startAsyncAccept(); } void NetworkServer::startAsyncAccept() { std::shared_ptr upcomingConnection = std::make_shared(*io); acceptor->async_accept(*upcomingConnection, std::bind(&NetworkServer::connectionAccepted, this, upcomingConnection, _1)); } void NetworkServer::run() { io->run(); } void NetworkServer::connectionAccepted(std::shared_ptr upcomingConnection, const boost::system::error_code & ec) { if(ec) { logNetwork->info("Something wrong during accepting: %s", ec.message()); return; } try { logNetwork->info("We got a new connection! :)"); auto connection = std::make_shared(upcomingConnection); connections.insert(connection); connection->start(); } catch(std::exception & e) { logNetwork->error("Failure processing new connection! %s", e.what()); } startAsyncAccept(); } void NetworkServer::sendPacket(const std::shared_ptr & connection, const std::vector & message) { connection->sendPacket(message); } VCMI_LIB_NAMESPACE_END