45 pendingSocket(io_service)
57 std::cout <<
"Running" << std::endl;
59 std::cout <<
"End" << std::endl;
63 using namespace std::placeholders;
65 asio::ip::tcp::endpoint endpoint(asio::ip::tcp::v4(),
port);
68 acceptor.listen(asio::socket_base::max_connections);
69 acceptor.set_option(asio::ip::tcp::acceptor::reuse_address(
false));
74 std::cout <<
"Starting thread" << std::endl;
82 std::cout <<
"Stopping..." << std::endl;
89 std::cerr <<
"Error accepting client connection: " << ec.message() << std::endl;
93 using namespace std::placeholders;
105 for(
auto it =
rooms.begin(); it !=
rooms.end(); ){
106 if(it->second->isEmpty()){
107 std::cout <<
"Removing empty room " << it->first <<
"\n";
108 it =
rooms.erase(it);
117 std::cerr <<
"Error reading client description" << std::endl;
122 const auto& roomName =
client.getRoomName();
123 std::cout <<
"Moving client " <<
client.getClientName()
124 <<
" to room " << roomName
127 auto roomIt =
rooms.find(roomName);
128 if(roomIt ==
rooms.end()){
130 std::cout <<
"Creating room " << roomName << std::endl;
131 roomIt =
rooms.insert({roomName, std::make_shared<Room>(roomName)}).
first;
135 auto& room = roomIt->second;
137 std::cerr <<
"Room " << roomName <<
" is full, dropping client" << std::endl;
139 roomIt->second->addClient(std::move(clientIt->second));
asio::ip::tcp::acceptor acceptor
std::thread worker_thread
void onClientDesc(Client &client, CompletionStatus status)
asio::io_service io_service
asio::ip::tcp::socket pendingSocket
std::map< std::string, std::shared_ptr< Room > > rooms
std::map< Client *, std::shared_ptr< Client > > incomingClients
void run(bool async=true)
void onConnectionAccepted(const std::error_code &ec)