]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - net_main.c
now counts (very approximate) cost of builtin functions called by progs, profile...
[xonotic/darkplaces.git] / net_main.c
index ed2d341d979e636d1328affb0321e6b4b8373dda..836d2d043331e75e97e21b6c7e9348bbd7895cdc 100644 (file)
@@ -72,6 +72,107 @@ qboolean    configRestored = false;
 
 int    net_driverlevel;
 
+/*
+#define SLSERVERS 1024
+#define SLNAME 40
+#define SLMAPNAME 16
+#define SLMODNAME 16
+typedef struct slserver_s
+{
+       unsigned int ipaddr;
+       unsigned short port;
+       unsigned short ping;
+       char name[SLNAME];
+       char mapname[SLMAPNAME];
+       char modname[SLMODNAME];
+}
+slserver_t;
+
+slserver_t sl_server[SLSERVERS];
+int sl_numservers = 0;
+
+void SL_ClearServers(void)
+{
+       sl_numservers = 0;
+}
+
+slserver_t *SL_FindServer(unsigned int ipaddr, unsigned short port)
+{
+       int i;
+       slserver_t *sl;
+       for (i = 0, sl = sl_server;i < sl_numservers;i++, sl++)
+               if (sl->ipaddr == ipaddr && sl->port == port)
+                       return;
+}
+
+void SL_AddServer(unsigned int ipaddr, unsigned short port)
+{
+       if (SL_FindServer(ipaddr, port))
+               return;
+       memset(sl_server + sl_numservers, 0, sizeof(slserver_t));
+       sl_server[sl_numservers].ipaddr = ipaddr;
+       sl_server[sl_numservers].port = port;
+       sl_server[sl_numservers].ping = 0xFFFF;
+       sl_numservers++;
+}
+
+void SL_UpdateServerName(unsigned int ipaddr, unsigned short port, const char *name);
+{
+       int namelen;
+       slserver_t *sl;
+       sl = SL_FindServer(ipaddr, port);
+       if (sl == NULL)
+               return;
+       memset(sl->name, 0, sizeof(sl->name));
+       namelen = strlen(name);
+       if (namelen > sizeof(sl->name) - 1)
+               namelen = sizeof(sl->name) - 1;
+       if (namelen)
+               memcpy(sl->name, name, namelen);
+}
+
+void SL_UpdateServerModName(unsigned int ipaddr, unsigned short port, const char *name);
+{
+       int namelen;
+       slserver_t *sl;
+       sl = SL_FindServer(ipaddr, port);
+       if (sl == NULL)
+               return;
+       memset(sl->modname, 0, sizeof(sl->modname));
+       namelen = strlen(name);
+       if (namelen > sizeof(sl->modname) - 1)
+               namelen = sizeof(sl->modname) - 1;
+       if (namelen)
+               memcpy(sl->modname, name, namelen);
+}
+
+void SL_UpdateServerMapName(unsigned int ipaddr, unsigned short port, const char *name);
+{
+       int namelen;
+       slserver_t *sl;
+       sl = SL_FindServer(ipaddr, port);
+       if (sl == NULL)
+               return;
+       memset(sl->mapname, 0, sizeof(sl->mapname));
+       namelen = strlen(name);
+       if (namelen > sizeof(sl->mapname) - 1)
+               namelen = sizeof(sl->mapname) - 1;
+       if (namelen)
+               memcpy(sl->mapname, name, namelen);
+}
+
+void SL_UpdateServerPing(unsigned int ipaddr, unsigned short port, float ping);
+{
+       int i;
+       slserver_t *sl;
+       sl = SL_FindServer(ipaddr, port);
+       if (sl == NULL)
+               return;
+       i = ping * 1000.0;
+       sl->ping = bound(0, i, 9999);
+}
+*/
+
 
 double                 net_time;
 
@@ -228,7 +329,7 @@ static void NET_Port_f (void)
 
 static void NET_Heartbeat_f (void)
 {
-       NET_Heartbeat ();
+       NET_Heartbeat (2);
 }
 
 
@@ -260,49 +361,48 @@ 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_InetSlist_f (void)
+void NET_Slist_f (void)
 {
-       if (slistInProgress)
-               return;
-
-       if (! slistSilent)
-       {
-               Con_Printf("Looking for Quake servers...\n");
-               PrintSlistHeader();
-       }
-
-       slistInProgress = true;
-       slistStartTime = Sys_DoubleTime();
+       NET_SlistCommon (&slistSendProcedure, &slistPollProcedure);
+}
 
-       SchedulePollProcedure(&inetSlistSendProcedure, 0.0);
-       SchedulePollProcedure(&inetSlistPollProcedure, 0.1);
 
-       hostCacheCount = 0;
+void NET_InetSlist_f (void)
+{
+       NET_SlistCommon (&inetSlistSendProcedure, &inetSlistPollProcedure);
 }
 
 
@@ -352,7 +452,7 @@ static void Slist_Poll(void)
 
 static void InetSlist_Send(void)
 {
-       char* host;
+       const char* host;
 
        if (!slistInProgress)
                return;
@@ -417,7 +517,6 @@ qsocket_t *NET_Connect (char *host)
 {
        qsocket_t               *ret;
        int                             n;
-       int                             numdrivers = net_numdrivers;
 
        SetNetTime();
 
@@ -428,8 +527,8 @@ qsocket_t *NET_Connect (char *host)
        {
                if (Q_strcasecmp (host, "local") == 0)
                {
-                       numdrivers = 1;
-                       goto JustDoIt;
+                       net_driverlevel = 0;
+                       return dfunc.Connect (host);
                }
 
                if (hostCacheCount)
@@ -468,7 +567,7 @@ qsocket_t *NET_Connect (char *host)
                        }
 
 JustDoIt:
-       for (net_driverlevel=0 ; net_driverlevel<numdrivers; net_driverlevel++)
+       for (net_driverlevel = 0;net_driverlevel < net_numdrivers;net_driverlevel++)
        {
                if (net_drivers[net_driverlevel].initialized == false)
                        continue;
@@ -484,7 +583,7 @@ JustDoIt:
                PrintSlist();
                PrintSlistTrailer();
        }
-       
+
        return NULL;
 }
 
@@ -683,9 +782,13 @@ NET_Heartbeat
 Send an heartbeat to the master server(s)
 ====================
 */
-void NET_Heartbeat (void)
+void NET_Heartbeat (int priority)
 {
-       char* host;
+       const char* host;
+
+       if (! Master_AllowHeartbeat (priority))
+               return;
+
        while ((host = Master_BuildHeartbeat ()) != NULL)
        {
                for (net_driverlevel=0 ; net_driverlevel<net_numdrivers; net_driverlevel++)