mirror of
https://github.com/FWGS/xash3d-fwgs.git
synced 2026-08-05 03:24:56 +08:00
engine: client: add steam broker messages for game init & shutdown events
This commit is contained in:
@@ -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" );
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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 );
|
||||
|
||||
Reference in New Issue
Block a user