You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
193 lines
3.8 KiB
193 lines
3.8 KiB
//===== Copyright © 1996-2009, Valve Corporation, All rights reserved. ======//
|
|
//
|
|
// Purpose:
|
|
//
|
|
//===========================================================================//
|
|
|
|
#ifndef X360_XLSP_CMD_H
|
|
#define X360_XLSP_CMD_H
|
|
#ifdef _X360
|
|
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
struct CXlspDatacenter;
|
|
class CXlspTitleServers;
|
|
class CXlspConnection;
|
|
class CJob;
|
|
|
|
|
|
//
|
|
// Datacenter info
|
|
//
|
|
|
|
struct CXlspDatacenter
|
|
{
|
|
XTITLE_SERVER_INFO m_xsi;
|
|
XNQOSINFO m_qos;
|
|
|
|
char m_szGatewayName[ XTITLE_SERVER_MAX_SERVER_INFO_LEN ];
|
|
int m_nMasterServerPortStart;
|
|
int m_numMasterServers;
|
|
|
|
int m_nPingBucket;
|
|
bool m_bSupportsPII;
|
|
|
|
IN_ADDR m_adrSecure;
|
|
|
|
static int Compare( CXlspDatacenter const *dc1, CXlspDatacenter const *dc2 );
|
|
|
|
bool ParseServerInfo();
|
|
void Destroy();
|
|
};
|
|
|
|
class CXlspTitleServers : public IDormantOperation
|
|
{
|
|
public:
|
|
explicit CXlspTitleServers( int nPingLimit, bool bMustSupportPII );
|
|
~CXlspTitleServers();
|
|
|
|
public:
|
|
bool IsSearchCompleted() const;
|
|
CUtlVector< CXlspDatacenter > & GetDatacenters();
|
|
|
|
void Update();
|
|
void Destroy();
|
|
|
|
public:
|
|
virtual bool UpdateDormantOperation();
|
|
|
|
protected:
|
|
bool EnumerateDcs( HANDLE &hEnumerate, XOVERLAPPED &xOverlapped, CUtlBuffer &bufResults );
|
|
bool ExecuteQosDcs( HANDLE &hEnumerate, XOVERLAPPED &xOverlapped, CUtlBuffer &bufResults, DWORD &numServers, XNQOS *&pQos );
|
|
void ParseDatacentersFromQos( CUtlVector< CXlspDatacenter > &arrDcs, CUtlBuffer &bufResults, XNQOS *&pQos );
|
|
|
|
protected:
|
|
enum State_t
|
|
{
|
|
STATE_INIT,
|
|
STATE_XLSP_ENUMERATE_DCS,
|
|
STATE_XLSP_QOS_DCS,
|
|
STATE_FINISHED
|
|
};
|
|
State_t m_eState;
|
|
|
|
HANDLE m_hEnumerate;
|
|
XOVERLAPPED m_xOverlapped;
|
|
CUtlBuffer m_bufXlspEnumerateDcs;
|
|
DWORD m_numServers;
|
|
XNQOS *m_pQos;
|
|
float m_flTimeout;
|
|
int m_nPingLimit;
|
|
bool m_bMustSupportPII;
|
|
CJob *m_pCancelOverlappedJob;
|
|
|
|
CUtlVector< CXlspDatacenter > m_arrDcs;
|
|
};
|
|
|
|
|
|
//
|
|
// XLSP Connection
|
|
//
|
|
|
|
class CXlspConnection : public IMatchEventsSink
|
|
{
|
|
public:
|
|
explicit CXlspConnection( bool bMustSupportPII );
|
|
|
|
protected:
|
|
virtual ~CXlspConnection();
|
|
|
|
public:
|
|
bool IsConnected() const;
|
|
bool HasError() const;
|
|
|
|
CXlspDatacenter const & GetDatacenter() const;
|
|
|
|
bool ExecuteCmd( KeyValues *pCommand, int numRetriesAllowed = 0, float flCmdRetryTimeout = 0 );
|
|
KeyValues * GetCmdResult() const { return m_pCmdResult; }
|
|
|
|
virtual void Update();
|
|
virtual void Destroy();
|
|
|
|
public:
|
|
void ResolveCmdSystemValues( KeyValues *pCommand );
|
|
|
|
// IMatchEventsSink
|
|
protected:
|
|
virtual void OnEvent( KeyValues *pEvent );
|
|
|
|
protected:
|
|
void ConnectXlspDc();
|
|
|
|
protected:
|
|
netadr_t GetXlspDcAddress();
|
|
|
|
enum State_t
|
|
{
|
|
STATE_INIT,
|
|
STATE_CONNECTING, // INIT -> CONNECTING -> CONNECTED
|
|
STATE_CONNECTED,
|
|
STATE_RUNNINGCMD, // CONNECTED -> RUNNINGCMD -> CONNECTED
|
|
STATE_ERROR
|
|
};
|
|
State_t m_eState;
|
|
|
|
//
|
|
// XLSP datacenters information
|
|
//
|
|
CXlspTitleServers *m_pTitleServers;
|
|
CXlspDatacenter m_dc;
|
|
|
|
int m_idCmdReplyId;
|
|
CUtlVector< char > m_bufCmdRetry;
|
|
int m_numCmdRetriesAllowed;
|
|
float m_flCmdRetryTimeout;
|
|
|
|
KeyValues *m_pCmdResult;
|
|
float m_flTimeout;
|
|
|
|
bool m_bMustSupportPII;
|
|
};
|
|
|
|
class CXlspConnectionCmdBatch
|
|
{
|
|
public:
|
|
CXlspConnectionCmdBatch( CXlspConnection *pConnection, CUtlVector< KeyValues * > &arrCommands, int numRetriesAllowedPerEachCmd = 0, float flCommandTimeout = 0.0f );
|
|
|
|
protected:
|
|
virtual ~CXlspConnectionCmdBatch();
|
|
|
|
public:
|
|
bool IsFinished() const;
|
|
bool HasAllResults() const;
|
|
CUtlVector< KeyValues * > &GetResults() { return m_arrResults; }
|
|
|
|
public:
|
|
virtual void Update();
|
|
virtual void Destroy();
|
|
|
|
protected:
|
|
void RunNextCmd();
|
|
|
|
protected:
|
|
CUtlVector< KeyValues * > m_arrCommands;
|
|
CUtlVector< KeyValues * > m_arrResults;
|
|
|
|
enum State_t
|
|
{
|
|
STATE_BATCH_WAITING,
|
|
STATE_RUNNINGCMD,
|
|
STATE_FINISHED
|
|
};
|
|
State_t m_eState;
|
|
int m_iCommand;
|
|
CXlspConnection *m_pXlspConn;
|
|
int m_numRetriesAllowedPerEachCmd;
|
|
float m_flCommandTimeout;
|
|
};
|
|
|
|
#endif // _X360
|
|
|
|
#endif // X360_XLSP_CMD_H
|