@@ -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
3031static 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