Skip to content

Commit efbcaf7

Browse files
committed
engine(masterserver): add master request timeout
1 parent dda12fc commit efbcaf7

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed

engine/masterserver.cpp

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ extern ConVar sv_lan;
2525

2626
#define S2A_EXTRA_DATA_HAS_GAMETAG_DATA 0x01 // Next bytes are the game tag string
2727
#define RETRY_INFO_REQUEST_TIME 0.4 // seconds
28+
#define MASTER_RESPONSE_TIMEOUT 1.5 // seconds
2829
#define INFO_REQUEST_TIMEOUT 5.0 // seconds
2930

3031
static char g_MasterServers[][64] =
@@ -102,6 +103,7 @@ class CMaster : public IMaster, public IServersInfo
102103

103104
double m_flStartRequestTime;
104105
double m_flRetryRequestTime;
106+
double m_flMasterRequestTime;
105107

106108
uint m_iInfoSequence;
107109
char m_szGameDir[256];
@@ -161,6 +163,15 @@ void CMaster::RunFrame()
161163
StopRefresh();
162164
}
163165

166+
if( m_iServersResponded > 0 &&
167+
m_iServersResponded >= m_serverAddresses.Count() &&
168+
m_flMasterRequestTime < Plat_FloatTime() - MASTER_RESPONSE_TIMEOUT )
169+
{
170+
StopRefresh();
171+
m_serverListResponse->RefreshComplete( NServerResponse::nServerResponded );
172+
return;
173+
}
174+
164175
if( m_flRetryRequestTime < Plat_FloatTime() - RETRY_INFO_REQUEST_TIME )
165176
{
166177
m_flRetryRequestTime = Plat_FloatTime();
@@ -250,7 +261,7 @@ newgameserver_t &CMaster::ProcessInfo(bf_read &buf)
250261

251262
// Password?
252263
s.m_bPassword = buf.ReadByte();
253-
264+
m_iServersResponded
254265
s.m_iFlags = buf.ReadLong();
255266

256267
if( s.m_iFlags & S2A_EXTRA_DATA_HAS_GAMETAG_DATA )
@@ -333,12 +344,6 @@ void CMaster::ProcessConnectionlessPacket( netpacket_t *packet )
333344
m_serverListResponse->ServerResponded( s );
334345

335346
m_iServersResponded++;
336-
337-
if( m_iServersResponded >= m_serverAddresses.Count() )
338-
{
339-
StopRefresh();
340-
m_serverListResponse->RefreshComplete( NServerResponse::nServerResponded );
341-
}
342347
break;
343348
}
344349
}
@@ -676,7 +681,7 @@ void CMaster::RequestInternetServerList(const char *gamedir, IServerListResponse
676681
StopRefresh();
677682
m_bWaitingForReplys = true;
678683
m_serverListResponse = response;
679-
m_flRetryRequestTime = m_flStartRequestTime = Plat_FloatTime();
684+
m_flRetryRequestTime = m_flStartRequestTime = m_flMasterRequestTime = Plat_FloatTime();
680685
}
681686

682687
ALIGN4 char buf[256] ALIGN4_POST;
@@ -690,7 +695,6 @@ void CMaster::RequestInternetServerList(const char *gamedir, IServerListResponse
690695
p = m_pMasterAddresses;
691696
while ( p )
692697
{
693-
Msg("master server %s request\n", p->adr.ToString());
694698
NET_SendPacket(NULL, NS_CLIENT, p->adr, msg.GetData(), msg.GetNumBytesWritten() );
695699
p = p->next;
696700
}

0 commit comments

Comments
 (0)