engine: client: add steam broker messages for game init & shutdown events

This commit is contained in:
SNMetamorph
2026-03-09 22:41:55 +04:00
committed by a1batross
parent 8acc7e4f76
commit 1f133ea702
3 changed files with 48 additions and 5 deletions

View File

@@ -94,7 +94,7 @@ static CVAR_DEFINE_AUTO( topcolor, "0", FCVAR_USERINFO|FCVAR_ARCHIVE|FCVAR_FILTE
static CVAR_DEFINE_AUTO( bottomcolor, "0", FCVAR_USERINFO|FCVAR_ARCHIVE|FCVAR_FILTERABLE, "player bottom color" );
CVAR_DEFINE_AUTO( rate, "25000", FCVAR_USERINFO|FCVAR_ARCHIVE|FCVAR_FILTERABLE, "player network rate" );
static CVAR_DEFINE_AUTO( cl_ticket_generator, "revemu2013", FCVAR_ARCHIVE, "you wouldn't steal a car" );
CVAR_DEFINE_AUTO( cl_ticket_generator, "revemu2013", FCVAR_ARCHIVE, "you wouldn't steal a car" );
static CVAR_DEFINE_AUTO( cl_advertise_engine_in_name, "1", FCVAR_ARCHIVE|FCVAR_PRIVILEGED, "add [Xash3D] to the nickname when connecting to GoldSrc servers" );
static CVAR_DEFINE_AUTO( cl_log_outofband, "0", FCVAR_ARCHIVE, "log out of band messages, can be useful for server admins and for engine debugging" );
static CVAR_DEFINE_AUTO( cl_autorecord, "0", 0, "automatically start recording a demo after joining the server" );

View File

@@ -41,15 +41,22 @@ static struct
netadr_t serveradr;
} broker;
qboolean SteamBroker_InitiateGameConnection( netadr_t serveradr, int challenge )
static qboolean SteamBroker_UpdateBrokerAddress( void )
{
if( NET_NetadrType( &broker.adr ) == NA_UNDEFINED )
{
if( !NET_StringToAdr( cl_steam_broker_addr.string, &broker.adr ))
{
Con_Printf( "%s: NET_StringToAdr( %s ) failed\n", __func__, cl_steam_broker_addr.string );
return false;
}
}
return true;
}
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
@@ -88,6 +95,39 @@ void SteamBroker_TerminateGameConnection( void )
NET_NetadrSetType( &broker.adr, NA_UNDEFINED );
}
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];
int len = Q_snprintf( buf, sizeof( buf ), "sb_gamedir %s", gamedir );
NET_SendPacket( NS_CLIENT, len, buf, broker.adr );
}
void SteamBroker_AnnounceGameShutdown( void )
{
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_SendPacket( NS_CLIENT, sizeof( "sb_terminate" ) - 1, "sb_terminate", broker.adr );
}
void SteamBroker_HandlePacket( netadr_t from, sizebuf_t *msg )
{
// message format
@@ -127,4 +167,5 @@ void SteamBroker_Init( void )
void SteamBroker_Shutdown( void )
{
SteamBroker_AnnounceGameShutdown();
}

View File

@@ -723,6 +723,7 @@ extern convar_t scr_loading;
extern convar_t v_dark; // start from dark
extern convar_t net_graph;
extern convar_t rate;
extern convar_t cl_ticket_generator;
extern convar_t m_ignore;
extern convar_t r_showtree;
extern convar_t ui_renderworld;
@@ -1214,6 +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_HandlePacket( netadr_t from, sizebuf_t *msg );
int SteamBroker_InitiateGameConnection( netadr_t serveradr, int challenge );
void SteamBroker_TerminateGameConnection( void );