void ServerNetworking::DisconnectImpl(PlayerConnectionPtr player_connection) { if (TRACE_EXECUTION) Logger().debugStream() << "ServerNetworking::DisconnectImpl : disconnecting player " << player_connection->PlayerID(); m_player_connections.erase(player_connection); m_disconnected_callback(player_connection); }
int ServerNetworking::NewPlayerID() const { int biggest_current_player_id(0); for (PlayerConnections::const_iterator it = m_player_connections.begin(); it != m_player_connections.end(); ++it) { const PlayerConnectionPtr player = *it; int player_id = player->PlayerID(); if (player_id != INVALID_PLAYER_ID && player_id > biggest_current_player_id) biggest_current_player_id = player_id; } return biggest_current_player_id + 1; }
void ServerNetworking::Disconnect(int id) { established_iterator it = GetPlayer(id); if (it == established_end()) { Logger().errorStream() << "ServerNetworking::Disconnect couldn't find player with id " << id << " to disconnect. aborting"; return; } PlayerConnectionPtr player = *it; if (player->PlayerID() != id) { Logger().errorStream() << "ServerNetworking::Disconnect got PlayerConnectionPtr with inconsistent player id (" << player->PlayerID() << ") to what was requrested (" << id << ")"; return; } Disconnect(player); }
void ServerNetworking::SendMessage(const Message& message) { if (message.ReceivingPlayer() == Networking::INVALID_PLAYER_ID) { // if recipient is INVALID_PLAYER_ID send message to all players for (ServerNetworking::const_established_iterator player_it = established_begin(); player_it != established_end(); ++player_it) { (*player_it)->SendMessage(message); } } else { // send message to single player established_iterator it = GetPlayer(message.ReceivingPlayer()); if (it == established_end()) { Logger().errorStream() << "ServerNetworking::SendMessage couldn't find player with id " << message.ReceivingPlayer() << " to disconnect. aborting"; return; } PlayerConnectionPtr player = *it; if (player->PlayerID() != message.ReceivingPlayer()) { Logger().errorStream() << "ServerNetworking::SendMessage got PlayerConnectionPtr with inconsistent player id (" << message.ReceivingPlayer() << ") to what was requrested (" << message.ReceivingPlayer() << ")"; return; } player->SendMessage(message); } }