Browse Source

engine(masterserver): add master request timeout

serverbrowser
nillerusr 2 years ago
parent
commit
efbcaf7820
  1. 22
      engine/masterserver.cpp

22
engine/masterserver.cpp

@ -25,6 +25,7 @@ extern ConVar sv_lan;
#define S2A_EXTRA_DATA_HAS_GAMETAG_DATA 0x01 // Next bytes are the game tag string #define S2A_EXTRA_DATA_HAS_GAMETAG_DATA 0x01 // Next bytes are the game tag string
#define RETRY_INFO_REQUEST_TIME 0.4 // seconds #define RETRY_INFO_REQUEST_TIME 0.4 // seconds
#define MASTER_RESPONSE_TIMEOUT 1.5 // seconds
#define INFO_REQUEST_TIMEOUT 5.0 // seconds #define INFO_REQUEST_TIMEOUT 5.0 // seconds
static char g_MasterServers[][64] = static char g_MasterServers[][64] =
@ -102,6 +103,7 @@ private:
double m_flStartRequestTime; double m_flStartRequestTime;
double m_flRetryRequestTime; double m_flRetryRequestTime;
double m_flMasterRequestTime;
uint m_iInfoSequence; uint m_iInfoSequence;
char m_szGameDir[256]; char m_szGameDir[256];
@ -161,6 +163,15 @@ void CMaster::RunFrame()
StopRefresh(); StopRefresh();
} }
if( m_iServersResponded > 0 &&
m_iServersResponded >= m_serverAddresses.Count() &&
m_flMasterRequestTime < Plat_FloatTime() - MASTER_RESPONSE_TIMEOUT )
{
StopRefresh();
m_serverListResponse->RefreshComplete( NServerResponse::nServerResponded );
return;
}
if( m_flRetryRequestTime < Plat_FloatTime() - RETRY_INFO_REQUEST_TIME ) if( m_flRetryRequestTime < Plat_FloatTime() - RETRY_INFO_REQUEST_TIME )
{ {
m_flRetryRequestTime = Plat_FloatTime(); m_flRetryRequestTime = Plat_FloatTime();
@ -250,7 +261,7 @@ newgameserver_t &CMaster::ProcessInfo(bf_read &buf)
// Password? // Password?
s.m_bPassword = buf.ReadByte(); s.m_bPassword = buf.ReadByte();
m_iServersResponded
s.m_iFlags = buf.ReadLong(); s.m_iFlags = buf.ReadLong();
if( s.m_iFlags & S2A_EXTRA_DATA_HAS_GAMETAG_DATA ) if( s.m_iFlags & S2A_EXTRA_DATA_HAS_GAMETAG_DATA )
@ -333,12 +344,6 @@ void CMaster::ProcessConnectionlessPacket( netpacket_t *packet )
m_serverListResponse->ServerResponded( s ); m_serverListResponse->ServerResponded( s );
m_iServersResponded++; m_iServersResponded++;
if( m_iServersResponded >= m_serverAddresses.Count() )
{
StopRefresh();
m_serverListResponse->RefreshComplete( NServerResponse::nServerResponded );
}
break; break;
} }
} }
@ -676,7 +681,7 @@ void CMaster::RequestInternetServerList(const char *gamedir, IServerListResponse
StopRefresh(); StopRefresh();
m_bWaitingForReplys = true; m_bWaitingForReplys = true;
m_serverListResponse = response; m_serverListResponse = response;
m_flRetryRequestTime = m_flStartRequestTime = Plat_FloatTime(); m_flRetryRequestTime = m_flStartRequestTime = m_flMasterRequestTime = Plat_FloatTime();
} }
ALIGN4 char buf[256] ALIGN4_POST; ALIGN4 char buf[256] ALIGN4_POST;
@ -690,7 +695,6 @@ void CMaster::RequestInternetServerList(const char *gamedir, IServerListResponse
p = m_pMasterAddresses; p = m_pMasterAddresses;
while ( p ) while ( p )
{ {
Msg("master server %s request\n", p->adr.ToString());
NET_SendPacket(NULL, NS_CLIENT, p->adr, msg.GetData(), msg.GetNumBytesWritten() ); NET_SendPacket(NULL, NS_CLIENT, p->adr, msg.GetData(), msg.GetNumBytesWritten() );
p = p->next; p = p->next;
} }

Loading…
Cancel
Save