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.
143 lines
4.6 KiB
143 lines
4.6 KiB
//====== Copyright ©, Valve Corporation, All rights reserved. =======
|
|
//
|
|
// Purpose: Holds the CGCSession class
|
|
//
|
|
//=============================================================================
|
|
|
|
#ifndef GCSESSION_H
|
|
#define GCSESSION_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
namespace GCSDK
|
|
{
|
|
|
|
class CGCGSSession;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Base class for sessions in the GC
|
|
//-----------------------------------------------------------------------------
|
|
class CGCSession
|
|
{
|
|
public:
|
|
CGCSession( const CSteamID & steamID, CGCSharedObjectCache *pCache );
|
|
virtual ~CGCSession();
|
|
|
|
const CSteamID & GetSteamID() const { return m_steamID; }
|
|
|
|
const CGCSharedObjectCache *GetSOCache() const { return m_pSOCache; }
|
|
CGCSharedObjectCache *GetSOCache() { return m_pSOCache; }
|
|
void RemoveSOCache() { m_pSOCache = NULL; }
|
|
|
|
EOSType GetOSType() const;
|
|
bool IsTestSession() const;
|
|
uint32 GetIPPublic() const;
|
|
|
|
bool BIsShuttingDown() const { return m_bIsShuttingDown; }
|
|
void SetIsShuttingDown( bool bIsShuttingDown ) { m_bIsShuttingDown = bIsShuttingDown; }
|
|
|
|
virtual void Dump( bool bFull = true ) const = 0;
|
|
|
|
virtual void MarkAccess() { }
|
|
virtual void Run();
|
|
virtual void YieldingSOCacheReloaded() {}
|
|
#ifdef DBGFLAG_VALIDATE
|
|
virtual void Validate( CValidator &validator, const char *pchName );
|
|
#endif // DBGFLAG_VALIDATE
|
|
|
|
private:
|
|
CSteamID m_steamID;
|
|
CGCSharedObjectCache *m_pSOCache;
|
|
uint32 m_unIPPublic;
|
|
EOSType m_osType : 16;
|
|
bool m_bIsShuttingDown : 1;
|
|
bool m_bIsTestSession : 1;
|
|
|
|
friend class CGCBase;
|
|
};
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Base class for user sessions in the GC
|
|
//-----------------------------------------------------------------------------
|
|
class CGCUserSession : public CGCSession
|
|
{
|
|
public:
|
|
CGCUserSession( const CSteamID & steamID, CGCSharedObjectCache *pCache ) : CGCSession( steamID, pCache ) { }
|
|
virtual ~CGCUserSession();
|
|
|
|
virtual bool BInit();
|
|
|
|
const CSteamID &GetSteamIDGS() const { return m_steamIDGS; }
|
|
const CSteamID &GetSteamIDGSPrev() const { return m_steamIDGSPrev; }
|
|
|
|
virtual bool BSetServer( const CSteamID &steamIDGS );
|
|
virtual bool BLeaveServer();
|
|
virtual void Dump( bool bFull = true ) const;
|
|
|
|
private:
|
|
CSteamID m_steamIDGS;
|
|
CSteamID m_steamIDGSPrev;
|
|
};
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Base class for gameserver sessions in the GC
|
|
//-----------------------------------------------------------------------------
|
|
class CGCGSSession : public CGCSession
|
|
{
|
|
public:
|
|
CGCGSSession( const CSteamID & steamID, CGCSharedObjectCache *pCache, uint32 unServerAddr, uint16 usServerPort ) ;
|
|
virtual ~CGCGSSession();
|
|
|
|
uint32 GetAddr() const { return m_unServerAddr; }
|
|
uint16 GetPort() const { return m_usServerPort; }
|
|
void SetIPAndPort( uint32 unServerAddr, uint16 usServerPort ) { m_unServerAddr = unServerAddr; m_usServerPort = usServerPort; }
|
|
|
|
int GetUserCount() const { return m_vecUsers.Count(); }
|
|
const CSteamID &GetUserID( int nIndex ) const { return m_vecUsers[nIndex]; }
|
|
|
|
// Manages users on the server. It is very important that these are not
|
|
// virtual and not yielding. For custom behavior override the Pre*() hooks below
|
|
bool BAddUser( const CSteamID &steamIDUser );
|
|
bool BRemoveUser( const CSteamID &steamIDUser );
|
|
void RemoveAllUsers();
|
|
|
|
virtual void Dump( bool bFull = true ) const;
|
|
|
|
protected:
|
|
// Hooks to trigger custom behavior when users are added and removed. It is
|
|
// very important that these do not yield. If you need to yield, start a job instead
|
|
virtual void PreAddUser( const CSteamID &steamIDUser ) {}
|
|
virtual void PostAddUser( const CSteamID &steamIDUser ) {}
|
|
virtual void PreRemoveUser( const CSteamID &steamIDUser ) {}
|
|
virtual void PostRemoveUser( const CSteamID &steamIDUser ) {}
|
|
virtual void PreRemoveAllUsers() {}
|
|
virtual void PostRemoveAllUsers() {}
|
|
|
|
public:
|
|
// These are the addresses the server itself told us
|
|
uint32 m_unServerPublicIPAddr;
|
|
uint32 m_unServerPrivateIPAddr;
|
|
uint32 m_unServerPort;
|
|
uint16 m_unServerTVPort;
|
|
CUtlString m_serverKey;
|
|
bool m_bServerHibernating;
|
|
int m_serverType;
|
|
int m_region;
|
|
|
|
#ifdef DBGFLAG_VALIDATE
|
|
virtual void Validate( CValidator &validator, const char *pchName );
|
|
#endif // DBGFLAG_VALIDATE
|
|
protected:
|
|
CUtlVector<CSteamID> m_vecUsers;
|
|
|
|
// These are the address of the server as connected to Steam
|
|
uint32 m_unServerAddr;
|
|
uint16 m_usServerPort;
|
|
};
|
|
|
|
} // namespace GCSDK
|
|
|
|
#endif // GCSESSION_H
|