summaryrefslogtreecommitdiff
path: root/src/network/network_server.cpp
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2010-10-15 21:56:06 +0000
committerrubidium <rubidium@openttd.org>2010-10-15 21:56:06 +0000
commit234bee0858b3c135f0827be63e904b8edacdee90 (patch)
tree0de110f2ffd193c3461ad837700d43dbb7c7e091 /src/network/network_server.cpp
parentc9cbab14ea4ad07354524dd1a7e7df4126722ba1 (diff)
downloadopenttd-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.cpp29
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);
/***********