]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - net_main.c
changed master server list around a bit (added rick.cube-sol.net and my master server...
[xonotic/darkplaces.git] / net_main.c
index 9cc149251d3d1af11d66c36f74e6c92c1040eef8..0697022f4f73941626ce8354e9c884a5e2c731e0 100644 (file)
@@ -20,6 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 // net_main.c
 
 #include "quakedef.h"
+#include "net_master.h"
 
 qsocket_t *net_activeSockets = NULL;
 mempool_t *net_mempool;
@@ -46,6 +47,11 @@ static void Slist_Poll(void);
 PollProcedure  slistSendProcedure = {NULL, 0.0, Slist_Send};
 PollProcedure  slistPollProcedure = {NULL, 0.0, Slist_Poll};
 
+static void InetSlist_Send(void);
+static void InetSlist_Poll(void);
+PollProcedure  inetSlistSendProcedure = {NULL, 0.0, InetSlist_Send};
+PollProcedure  inetSlistPollProcedure = {NULL, 0.0, InetSlist_Poll};
+
 
 sizebuf_t              net_message;
 int                            net_activeconnections = 0;
@@ -162,7 +168,7 @@ static void NET_Listen_f (void)
 
 static void MaxPlayers_f (void)
 {
-       int     n;
+       int n;
 
        if (Cmd_Argc () != 2)
        {
@@ -177,13 +183,9 @@ static void MaxPlayers_f (void)
        }
 
        n = atoi(Cmd_Argv(1));
-       if (n < 1)
-               n = 1;
-       if (n > svs.maxclientslimit)
-       {
-               n = svs.maxclientslimit;
+       n = bound(1, n, MAX_SCOREBOARD);
+       if (svs.maxclients != n)
                Con_Printf ("\"maxplayers\" set to \"%u\"\n", n);
-       }
 
        if ((n == 1) && listening)
                Cbuf_AddText ("listen 0\n");
@@ -191,7 +193,7 @@ static void MaxPlayers_f (void)
        if ((n > 1) && (!listening))
                Cbuf_AddText ("listen 1\n");
 
-       svs.maxclients = n;
+       SV_SetMaxClients(n);
 }
 
 
@@ -224,6 +226,12 @@ static void NET_Port_f (void)
 }
 
 
+static void NET_Heartbeat_f (void)
+{
+       NET_Heartbeat (2);
+}
+
+
 static void PrintSlistHeader(void)
 {
        Con_Printf("Server          Map             Users\n");
@@ -252,31 +260,51 @@ static void PrintSlistTrailer(void)
        if (hostCacheCount)
                Con_Printf("== end list ==\n\n");
        else
-               Con_Printf("No Quake servers found.\n\n");
+       {
+               if (gamemode == GAME_TRANSFUSION)
+                       Con_Printf("No Transfusion servers found.\n\n");
+               else
+                       Con_Printf("No Quake servers found.\n\n");
+       }
 }
 
 
-void NET_Slist_f (void)
+void NET_SlistCommon (PollProcedure *sendProcedure, PollProcedure *pollProcedure)
 {
        if (slistInProgress)
                return;
 
        if (! slistSilent)
        {
-               Con_Printf("Looking for Quake servers...\n");
+               if (gamemode == GAME_TRANSFUSION)
+                       Con_Printf("Looking for Transfusion servers...\n");
+               else
+                       Con_Printf("Looking for Quake servers...\n");
                PrintSlistHeader();
        }
 
        slistInProgress = true;
        slistStartTime = Sys_DoubleTime();
 
-       SchedulePollProcedure(&slistSendProcedure, 0.0);
-       SchedulePollProcedure(&slistPollProcedure, 0.1);
+       SchedulePollProcedure(sendProcedure, 0.0);
+       SchedulePollProcedure(pollProcedure, 0.1);
 
        hostCacheCount = 0;
 }
 
 
+void NET_Slist_f (void)
+{
+       NET_SlistCommon (&slistSendProcedure, &slistPollProcedure);
+}
+
+
+void NET_InetSlist_f (void)
+{
+       NET_SlistCommon (&inetSlistSendProcedure, &inetSlistPollProcedure);
+}
+
+
 static void Slist_Send(void)
 {
        for (net_driverlevel=0; net_driverlevel < net_numdrivers; net_driverlevel++)
@@ -321,6 +349,60 @@ static void Slist_Poll(void)
 }
 
 
+static void InetSlist_Send(void)
+{
+       const char* host;
+
+       if (!slistInProgress)
+               return;
+
+       while ((host = Master_BuildGetServers ()) != NULL)
+       {
+               for (net_driverlevel=0; net_driverlevel < net_numdrivers; net_driverlevel++)
+               {
+                       if (!slistLocal && net_driverlevel == 0)
+                               continue;
+                       if (net_drivers[net_driverlevel].initialized == false)
+                               continue;
+                       dfunc.SearchForInetHosts (host);
+               }
+       }
+
+       if ((Sys_DoubleTime() - slistStartTime) < 3.5)
+               SchedulePollProcedure(&inetSlistSendProcedure, 1.0);
+}
+
+
+static void InetSlist_Poll(void)
+{
+       for (net_driverlevel=0; net_driverlevel < net_numdrivers; net_driverlevel++)
+       {
+               if (!slistLocal && net_driverlevel == 0)
+                       continue;
+               if (net_drivers[net_driverlevel].initialized == false)
+                       continue;
+               // We stop as soon as we have one answer (FIXME: bad...)
+               if (dfunc.SearchForInetHosts (NULL))
+                       slistInProgress = false;
+       }
+
+       if (! slistSilent)
+               PrintSlist();
+
+       if (slistInProgress && (Sys_DoubleTime() - slistStartTime) < 4.0)
+       {
+               SchedulePollProcedure(&inetSlistPollProcedure, 0.1);
+               return;
+       }
+
+       if (! slistSilent)
+               PrintSlistTrailer();
+       slistInProgress = false;
+       slistSilent = false;
+       slistLocal = true;
+}
+
+
 /*
 ===================
 NET_Connect
@@ -593,6 +675,34 @@ qboolean NET_CanSendMessage (qsocket_t *sock)
 }
 
 
+/*
+====================
+NET_Heartbeat
+
+Send an heartbeat to the master server(s)
+====================
+*/
+void NET_Heartbeat (int priority)
+{
+       const char* host;
+
+       if (! Master_AllowHeartbeat (priority))
+               return;
+
+       while ((host = Master_BuildHeartbeat ()) != NULL)
+       {
+               for (net_driverlevel=0 ; net_driverlevel<net_numdrivers; net_driverlevel++)
+               {
+                       if (net_drivers[net_driverlevel].initialized == false)
+                               continue;
+                       if (net_driverlevel && listening == false)
+                               continue;
+                       dfunc.Heartbeat (host);
+               }
+       }
+}
+
+
 int NET_SendToAll(sizebuf_t *data, int blocktime)
 {
        double          start;
@@ -695,7 +805,7 @@ void NET_Init (void)
        }
        net_hostport = DEFAULTnet_hostport;
 
-       if (COM_CheckParm("-listen") || cls.state == ca_dedicated || gamemode == GAME_BLOODBATH)
+       if (COM_CheckParm("-listen") || cls.state == ca_dedicated || gamemode == GAME_TRANSFUSION)
                listening = true;
 
        SetNetTime();
@@ -708,10 +818,12 @@ void NET_Init (void)
        Cvar_RegisterVariable (&net_messagetimeout);
        Cvar_RegisterVariable (&hostname);
 
-       Cmd_AddCommand ("slist", NET_Slist_f);
+       Cmd_AddCommand ("net_slist", NET_Slist_f);
+       Cmd_AddCommand ("net_inetslist", NET_InetSlist_f);
        Cmd_AddCommand ("listen", NET_Listen_f);
        Cmd_AddCommand ("maxplayers", MaxPlayers_f);
        Cmd_AddCommand ("port", NET_Port_f);
+       Cmd_AddCommand ("heartbeat", NET_Heartbeat_f);
 
        // initialize all the drivers
        for (net_driverlevel=0 ; net_driverlevel<net_numdrivers ; net_driverlevel++)
@@ -729,6 +841,8 @@ void NET_Init (void)
                Con_DPrintf("IPX address %s\n", my_ipx_address);
        if (*my_tcpip_address)
                Con_DPrintf("TCP/IP address %s\n", my_tcpip_address);
+
+       Master_Init ();
 }
 
 /*
@@ -737,14 +851,12 @@ NET_Shutdown
 ====================
 */
 
-void           NET_Shutdown (void)
+void NET_Shutdown (void)
 {
-       qsocket_t       *sock;
-
        SetNetTime();
 
-       for (sock = net_activeSockets;sock;sock = net_activeSockets)
-               NET_Close(sock);
+       while (net_activeSockets)
+               NET_Close(net_activeSockets);
 
 //
 // shutdown the drivers