From 234bee0858b3c135f0827be63e904b8edacdee90 Mon Sep 17 00:00:00 2001 From: rubidium Date: Fri, 15 Oct 2010 21:56:06 +0000 Subject: (svn r20938) -Codechange: make the code for listening on a socket (more) reusable --- src/network/network_server.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'src/network/network_server.cpp') diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index ccb1bb37e..ab2bd1632 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -49,6 +49,9 @@ assert_compile(NetworkClientSocketPool::MAX_SIZE == MAX_CLIENT_SLOTS); NetworkClientSocketPool _networkclientsocket_pool("NetworkClientSocket"); INSTANTIATE_POOL_METHODS(NetworkClientSocket) +/** Instantiate the listen sockets. */ +template SocketList TCPListenHandler::sockets; + /** * Create a new socket for the server side of the game connection. * @param s The socket to connect with. @@ -118,6 +121,32 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::CloseConnection(NetworkRecvSta return status; } +/** + * Whether an connection is allowed or not at this moment. + * @return true if the connection is allowed. + */ +/* static */ bool ServerNetworkGameSocketHandler::AllowConnection() +{ + extern byte _network_clients_connected; + return _network_clients_connected < MAX_CLIENTS && _network_game_info.clients_on < _settings_client.network.max_clients; +} + +/** Send the packets for the server sockets. */ +/* static */ void ServerNetworkGameSocketHandler::Send() +{ + NetworkClientSocket *cs; + FOR_ALL_CLIENT_SOCKETS(cs) { + if (cs->writable) { + cs->Send_Packets(); + + if (cs->status == STATUS_MAP) { + /* This client is in the middle of a map-send, call the function for that */ + cs->SendMap(); + } + } + } +} + static void NetworkHandleCommandQueue(NetworkClientSocket *cs); /*********** -- cgit v1.2.3-70-g09d2