diff options
author | rubidium <rubidium@openttd.org> | 2010-10-15 21:56:06 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2010-10-15 21:56:06 +0000 |
commit | 234bee0858b3c135f0827be63e904b8edacdee90 (patch) | |
tree | 0de110f2ffd193c3461ad837700d43dbb7c7e091 /src/network/network_server.cpp | |
parent | c9cbab14ea4ad07354524dd1a7e7df4126722ba1 (diff) | |
download | openttd-234bee0858b3c135f0827be63e904b8edacdee90.tar.xz |
(svn r20938) -Codechange: make the code for listening on a socket (more) reusable
Diffstat (limited to 'src/network/network_server.cpp')
-rw-r--r-- | src/network/network_server.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
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<ServerNetworkGameSocketHandler, PACKET_SERVER_FULL, PACKET_SERVER_BANNED>::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); /*********** |