From d5f0ddc20b192cf1f17b27347dd467cddf493a6d Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Thu, 6 Apr 2006 20:48:35 +0000 Subject: Add the ability to query the current state of servers, and '-query' command line option to do so. Subversion-branch: /trunk/chocolate-doom Subversion-revision: 464 --- src/net_server.c | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) (limited to 'src/net_server.c') diff --git a/src/net_server.c b/src/net_server.c index 3a01f3b9..c57ef61a 100644 --- a/src/net_server.c +++ b/src/net_server.c @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: net_server.c 461 2006-04-06 17:53:43Z fraggle $ +// $Id: net_server.c 464 2006-04-06 20:48:35Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -1058,6 +1058,42 @@ static void NET_SV_ParseResendRequest(net_packet_t *packet, net_client_t *client NET_SV_SendTics(client, start, last); } +// Send a response back to the client + +void NET_SV_SendQueryResponse(net_addr_t *addr) +{ + net_packet_t *reply; + + reply = NET_NewPacket(64); + NET_WriteInt16(reply, NET_PACKET_TYPE_QUERY_RESPONSE); + + // Version + + NET_WriteString(reply, PACKAGE_STRING); + + // Server state + + NET_WriteInt8(reply, server_state); + + // Number of players/maximum players + + NET_WriteInt8(reply, NET_SV_NumClients()); + NET_WriteInt8(reply, MAXPLAYERS); + + // Game mode/mission + + NET_WriteInt8(reply, sv_gamemode); + NET_WriteInt8(reply, sv_gamemission); + + // Server description. This is currently hard-coded. + + NET_WriteString(reply, "Chocolate Doom server"); + + // Send it and we're done. + + NET_SendPacket(addr, reply); + NET_FreePacket(reply); +} // Process a packet received by the server @@ -1083,6 +1119,10 @@ static void NET_SV_Packet(net_packet_t *packet, net_addr_t *addr) { NET_SV_ParseSYN(packet, client, addr); } + else if (packet_type == NET_PACKET_TYPE_QUERY) + { + NET_SV_SendQueryResponse(addr); + } else if (client == NULL) { // Must come from a valid client; ignore otherwise @@ -1299,6 +1339,7 @@ static void NET_SV_RunClient(net_client_t *client) if (NET_SV_NumClients() <= 0) { server_state = SERVER_WAITING_START; + sv_gamemode = indetermined; } } @@ -1355,6 +1396,7 @@ void NET_SV_Init(void) } server_state = SERVER_WAITING_START; + sv_gamemode = indetermined; server_initialised = true; } -- cgit v1.2.3