diff options
author | Simon Howard | 2010-12-02 18:23:09 +0000 |
---|---|---|
committer | Simon Howard | 2010-12-02 18:23:09 +0000 |
commit | f9ab444cc614db3b2380d02750d142f9b17a8b90 (patch) | |
tree | e82806098e555098d2d5581a06d23c2497211f8d /src/net_server.c | |
parent | 74034c0c1bd68fbc8c57daee922103f69c7ddf6d (diff) | |
download | chocolate-doom-f9ab444cc614db3b2380d02750d142f9b17a8b90.tar.gz chocolate-doom-f9ab444cc614db3b2380d02750d142f9b17a8b90.tar.bz2 chocolate-doom-f9ab444cc614db3b2380d02750d142f9b17a8b90.zip |
Register servers with Internet master server.
Subversion-branch: /trunk/chocolate-doom
Subversion-revision: 2181
Diffstat (limited to 'src/net_server.c')
-rw-r--r-- | src/net_server.c | 55 |
1 files changed, 54 insertions, 1 deletions
diff --git a/src/net_server.c b/src/net_server.c index 383608be..7b67ea56 100644 --- a/src/net_server.c +++ b/src/net_server.c @@ -40,10 +40,15 @@ #include "net_io.h" #include "net_loop.h" #include "net_packet.h" +#include "net_query.h" #include "net_server.h" #include "net_sdl.h" #include "net_structrw.h" +// How often to refresh our registration with the master server. + +#define MASTER_REFRESH_PERIOD 20 * 60 /* 20 minutes */ + typedef enum { // waiting for the game to start @@ -127,6 +132,11 @@ static unsigned int sv_gamemode; static unsigned int sv_gamemission; static net_gamesettings_t sv_settings; +// For registration with master server: + +static net_addr_t *master_server = NULL; +static unsigned int master_refresh_time; + // receive window static unsigned int recvwindow_start; @@ -1108,6 +1118,14 @@ static void NET_SV_Packet(net_packet_t *packet, net_addr_t *addr) net_client_t *client; unsigned int packet_type; + // Response from master server? + + if (addr != NULL && addr == master_server) + { + NET_Query_MasterResponse(packet); + return; + } + // Find which client this packet came from client = NET_SV_FindClient(addr); @@ -1513,6 +1531,32 @@ void NET_SV_Init(void) server_initialized = true; } +void NET_SV_RegisterWithMaster(void) +{ + //! + // When running a server, don't register with the global master server. + // + // @category net + // + + if (!M_CheckParm("-privateserver")) + { + master_server = NET_Query_ResolveMaster(server_context); + } + else + { + master_server = NULL; + } + + // Send request. + + if (master_server != NULL) + { + NET_Query_AddToMaster(master_server); + master_refresh_time = I_GetTimeMS(); + } +} + // Run server code to check for new packets/send packets as the server // requires @@ -1527,12 +1571,21 @@ void NET_SV_Run(void) return; } - while (NET_RecvPacket(server_context, &addr, &packet)) + while (NET_RecvPacket(server_context, &addr, &packet)) { NET_SV_Packet(packet, addr); NET_FreePacket(packet); } + // Possibly refresh our registration with the master server. + + if (master_server != NULL + && I_GetTimeMS() - master_refresh_time > MASTER_REFRESH_PERIOD * 1000) + { + NET_Query_AddToMaster(master_server); + master_refresh_time = I_GetTimeMS(); + } + // "Run" any clients that may have things to do, independent of responses // to received packets |