mirror of
https://github.com/FWGS/xash3d-fwgs.git
synced 2026-08-05 03:24:56 +08:00
engine: client: refactor steam broker internal logic
This commit is contained in:
@@ -3594,6 +3594,8 @@ void Host_ClientBegin( void )
|
||||
|
||||
// if running the server locally, make intentions now
|
||||
if( SV_Active( )) CL_SendCommand ();
|
||||
|
||||
SteamBroker_Frame();
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -36,9 +36,10 @@ static CVAR_DEFINE_AUTO( cl_steam_broker_addr, "127.0.0.1:27420", FCVAR_ARCHIVE,
|
||||
static struct
|
||||
{
|
||||
netadr_t adr;
|
||||
|
||||
int challenge;
|
||||
netadr_t serveradr;
|
||||
qboolean announced;
|
||||
qboolean addr_initialized;
|
||||
} broker;
|
||||
|
||||
static qboolean SteamBroker_UpdateBrokerAddress( void )
|
||||
@@ -53,12 +54,6 @@ static qboolean SteamBroker_UpdateBrokerAddress( void )
|
||||
|
||||
qboolean SteamBroker_InitiateGameConnection( netadr_t serveradr, int challenge )
|
||||
{
|
||||
if( !SteamBroker_UpdateBrokerAddress( ))
|
||||
{
|
||||
Con_Printf( "%s: failed to resolve broker address \"%s\"\n", __func__, cl_steam_broker_addr.string );
|
||||
return false;
|
||||
}
|
||||
|
||||
// only ipv4 supported
|
||||
if( NET_NetadrType( &serveradr ) != NA_IP )
|
||||
return false;
|
||||
@@ -78,13 +73,10 @@ qboolean SteamBroker_InitiateGameConnection( netadr_t serveradr, int challenge )
|
||||
|
||||
void SteamBroker_TerminateGameConnection( void )
|
||||
{
|
||||
if( NET_NetadrType( &broker.adr ) == NA_UNDEFINED )
|
||||
return;
|
||||
|
||||
if( NET_NetadrType( &cls.serveradr ) != NA_IP )
|
||||
return;
|
||||
|
||||
if( cls.legacymode != PROTO_GOLDSRC )
|
||||
if( Q_stricmp( cl_ticket_generator.string, "steam" ) != 0 )
|
||||
return;
|
||||
|
||||
// sb_disconnect <ip:port> <challenge>
|
||||
@@ -92,7 +84,6 @@ void SteamBroker_TerminateGameConnection( void )
|
||||
int len = Q_snprintf( buf, sizeof( buf ), "sb_disconnect %s %d", NET_AdrToString( cls.serveradr ), broker.challenge );
|
||||
|
||||
NET_SendPacket( NS_CLIENT, len, buf, broker.adr );
|
||||
NET_NetadrSetType( &broker.adr, NA_UNDEFINED );
|
||||
}
|
||||
|
||||
void SteamBroker_AnnounceGameStart( const char *gamedir )
|
||||
@@ -100,12 +91,6 @@ void SteamBroker_AnnounceGameStart( const char *gamedir )
|
||||
if( Q_stricmp( cl_ticket_generator.string, "steam" ) != 0 )
|
||||
return;
|
||||
|
||||
if( !SteamBroker_UpdateBrokerAddress( ))
|
||||
{
|
||||
Con_Printf( "%s: failed to resolve broker address \"%s\"\n", __func__, cl_steam_broker_addr.string );
|
||||
return;
|
||||
}
|
||||
|
||||
NET_Config( true, true ); // initialize sockets to be able to send packets to broker
|
||||
|
||||
char buf[512];
|
||||
@@ -114,18 +99,56 @@ void SteamBroker_AnnounceGameStart( const char *gamedir )
|
||||
NET_SendPacket( NS_CLIENT, len, buf, broker.adr );
|
||||
}
|
||||
|
||||
void SteamBroker_AnnounceGameShutdown( void )
|
||||
void SteamBroker_AnnounceGameShutdown( netadr_t broker_addr )
|
||||
{
|
||||
NET_SendPacket( NS_CLIENT, sizeof( "sb_terminate" ) - 1, "sb_terminate", broker_addr );
|
||||
}
|
||||
|
||||
void SteamBroker_Frame( void )
|
||||
{
|
||||
if( Q_stricmp( cl_ticket_generator.string, "steam" ) != 0 )
|
||||
return;
|
||||
|
||||
if( !SteamBroker_UpdateBrokerAddress( ))
|
||||
qboolean restart = FBitSet( cl_steam_broker_addr.flags|cl_ticket_generator.flags, FCVAR_CHANGED );
|
||||
|
||||
if( !broker.addr_initialized )
|
||||
{
|
||||
Con_Printf( "%s: failed to resolve broker address \"%s\"\n", __func__, cl_steam_broker_addr.string );
|
||||
return;
|
||||
if( !SteamBroker_UpdateBrokerAddress( ))
|
||||
{
|
||||
Con_Printf( "%s: failed to resolve broker address \"%s\"\n", __func__, cl_steam_broker_addr.string );
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
broker.addr_initialized = true;
|
||||
}
|
||||
}
|
||||
|
||||
NET_SendPacket( NS_CLIENT, sizeof( "sb_terminate" ) - 1, "sb_terminate", broker.adr );
|
||||
if( restart )
|
||||
{
|
||||
broker.announced = false;
|
||||
ClearBits( cl_ticket_generator.flags, FCVAR_CHANGED );
|
||||
ClearBits( cl_steam_broker_addr.flags, FCVAR_CHANGED );
|
||||
}
|
||||
|
||||
if( !broker.announced )
|
||||
{
|
||||
netadr_t previous_addr = broker.adr;
|
||||
if( !SteamBroker_UpdateBrokerAddress( ))
|
||||
{
|
||||
Con_Printf( "%s: failed to resolve broker address \"%s\"\n", __func__, cl_steam_broker_addr.string );
|
||||
}
|
||||
else
|
||||
{
|
||||
if( restart )
|
||||
{
|
||||
// terminate old steam broker if instance address has changed
|
||||
SteamBroker_AnnounceGameShutdown( previous_addr );
|
||||
}
|
||||
SteamBroker_AnnounceGameStart( GI->gamefolder );
|
||||
}
|
||||
broker.announced = true;
|
||||
}
|
||||
}
|
||||
|
||||
void SteamBroker_HandlePacket( netadr_t from, sizebuf_t *msg )
|
||||
@@ -161,11 +184,16 @@ void SteamBroker_HandlePacket( netadr_t from, sizebuf_t *msg )
|
||||
|
||||
void SteamBroker_Init( void )
|
||||
{
|
||||
broker.announced = false;
|
||||
broker.addr_initialized = false;
|
||||
Cvar_RegisterVariable( &cl_steam_broker_addr );
|
||||
NET_NetadrSetType( &broker.adr, NA_UNDEFINED );
|
||||
}
|
||||
|
||||
void SteamBroker_Shutdown( void )
|
||||
{
|
||||
SteamBroker_AnnounceGameShutdown();
|
||||
if( Q_stricmp( cl_ticket_generator.string, "steam" ) != 0 )
|
||||
return;
|
||||
|
||||
SteamBroker_AnnounceGameShutdown( broker.adr );
|
||||
}
|
||||
|
||||
@@ -1215,7 +1215,7 @@ void CL_GetSecuredClientAPI( CL_EXPORT_FUNCS F );
|
||||
//
|
||||
void SteamBroker_Init( void );
|
||||
void SteamBroker_Shutdown( void );
|
||||
void SteamBroker_AnnounceGameStart( const char *gamedir );
|
||||
void SteamBroker_Frame( void );
|
||||
void SteamBroker_HandlePacket( netadr_t from, sizebuf_t *msg );
|
||||
int SteamBroker_InitiateGameConnection( netadr_t serveradr, int challenge );
|
||||
void SteamBroker_TerminateGameConnection( void );
|
||||
|
||||
Reference in New Issue
Block a user