summaryrefslogtreecommitdiff
path: root/src/net_server.c
diff options
context:
space:
mode:
authorSimon Howard2010-12-02 18:23:09 +0000
committerSimon Howard2010-12-02 18:23:09 +0000
commitf9ab444cc614db3b2380d02750d142f9b17a8b90 (patch)
treee82806098e555098d2d5581a06d23c2497211f8d /src/net_server.c
parent74034c0c1bd68fbc8c57daee922103f69c7ddf6d (diff)
downloadchocolate-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.c55
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