From ebac2ab0d0a975a5a4b2bcb4703f75eb3a49b2af Mon Sep 17 00:00:00 2001 From: Rafael Barreto Date: Sat, 7 Aug 2010 04:28:44 +0000 Subject: [PATCH] (trying to) check if the server is lagging, avoid ms registration in the middle of a game git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@5551 e016b1c5-ed68-44aa-a2f7-31cac88cffde --- source/src/server.cpp | 8 +++++++- source/src/serverms.cpp | 6 +++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/source/src/server.cpp b/source/src/server.cpp index d8f8ae4b..66bb95af 100644 --- a/source/src/server.cpp +++ b/source/src/server.cpp @@ -56,6 +56,7 @@ servermapbuffer mapbuffer; char *global_name; int totalclients = 0; int cn2boot; +int servertime = 0, serverlagged = 0; bool valid_client(int cn) { @@ -3398,6 +3399,8 @@ void linequalitystats(int elapsed) } } +bool msreg = true; + void serverslice(uint timeout) // main server update, called from cube main loop in sp, or dedicated server loop { static int msend = 0, mrec = 0, csend = 0, crec = 0, mnum = 0, cnum = 0; @@ -3410,6 +3413,8 @@ void serverslice(uint timeout) // main server update, called from cube main lo int diff = nextmillis - servmillis; gamemillis += diff; servmillis = nextmillis; + servertime = ((diff + 3 * servertime)>>2); + if (servertime > 40) serverlagged = servmillis; if(m_demo) readdemo(); @@ -3455,6 +3460,7 @@ void serverslice(uint timeout) // main server update, called from cube main lo loggamestatus("game finished"); if(demorecord) enddemorecord(); interm = nextsendscore = 0; + msreg = true; //start next game if(nextmapname[0]) startgame(nextmapname, nextgamemode); @@ -3466,7 +3472,7 @@ void serverslice(uint timeout) // main server update, called from cube main lo if(!isdedicated) return; // below is network only - serverms(smode, numclients(), minremain, smapname, servmillis, serverhost->address, &mnum, &msend, &mrec, &cnum, &csend, &crec, SERVER_PROTOCOL_VERSION); + if (msreg || !totalclients) serverms(smode, numclients(), minremain, smapname, servmillis, serverhost->address, &mnum, &msend, &mrec, &cnum, &csend, &crec, SERVER_PROTOCOL_VERSION); if(autoteam && m_teammode && !m_arena && !interm && servmillis - lastfillup > 5000 && refillteams()) lastfillup = servmillis; diff --git a/source/src/serverms.cpp b/source/src/serverms.cpp index fa43bb93..2e329e98 100644 --- a/source/src/serverms.cpp +++ b/source/src/serverms.cpp @@ -87,6 +87,7 @@ bool requestmasterf(const char *fmt, ...) } extern void processmasterinput(const char *cmd, int cmdlen, const char *args); +extern bool msreg; void processmasterinput() { @@ -105,7 +106,10 @@ void processmasterinput() if(!strncmp(input, "failreg", cmdlen)) logline(ACLOG_WARNING, "master server registration failed: %s", args); else if(!strncmp(input, "succreg", cmdlen)) + { + msreg = false; logline(ACLOG_INFO, "master server registration succeeded"); + } else processmasterinput(input, cmdlen, args); masterinpos = end - masterin.getbuf(); @@ -162,7 +166,7 @@ extern char *global_name; // send alive signal to masterserver every hour of uptime static inline void updatemasterserver(int millis, int port) { - if(!lastupdatemaster || millis-lastupdatemaster>60*60*1000) + if(!lastupdatemaster || millis-lastupdatemaster>40*60*1000) { char servername[30]; memset(servername,'\0',30); filtertext(servername,global_name,-1,20); if(mastername[0]) requestmasterf("regserv %d %s %d\n", port, servername[0] ? servername : "noname", AC_VERSION);