hl2_src-leak-2017/src/public/gcsdk/accountdetails.h

166 lines
5.1 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Holds the CAccountDetails class.
//
//=============================================================================
#ifndef ACCOUNTDETAILS_H
#define ACCOUNTDETAILS_H
#ifdef _WIN32
#pragma once
#endif
#include "tier1/thash.h"
#include "tier1/utlhashmaplarge.h"
namespace GCSDK
{
class CAccountDetails
{
public:
CAccountDetails();
void Init( CGCSystemMsg_GetAccountDetails_Response &msgResponse );
void Reset();
bool BIsExpired() const;
bool BIsValid() const { return m_bValid; }
const char *GetAccountName() const { return m_sAccountName.Get(); }
bool BHasPublicProfile() const { return m_bPublicProfile; }
bool BHasPublicInventory() const { return m_bPublicInventory; }
bool BIsVacBanned() const { return m_bVacBanned; }
bool BIsCyberCafe() const { return m_bCyberCafe; }
bool BIsSchoolAccount() const { return m_bSchoolAccount; }
bool BIsFreeTrialAccount() const { return m_bFreeTrialAccount; }
bool BIsFreeTrialAccountOrDemo() const { return m_bFreeTrialAccount || m_unPackage == 0; }
bool BIsSubscribed() const { return m_bSubscribed; }
bool BIsLowViolence() const { return m_bLowViolence; }
bool BIsLimitedAccount() const { return m_bLimited; }
bool BIsAccountLocked() const { return m_bAccountLocked; }
bool BIsCommunityBanned() const { return m_bCommunityBanned; }
bool BIsTradeBanned() const { return m_bTradeBanned; }
bool BIsSteamGuardEnabled() const { return m_bIsSteamGuardEnabled; }
bool BIsPhoneVerified() const { return m_bIsPhoneVerified; }
bool BIsTwoFactorAuthEnabled() const { return m_bIsTwoFactorAuthEnabled; }
bool BIsPhoneIdentifying() const { return m_bIsPhoneIdentifying; }
uint32 GetPackage() const { return m_unPackage; }
RTime32 GetTimeVACBanEnd() const { return m_rtimeVACBanEnd; }
uint32 GetSteamLevel() const { return m_unSteamLevel; }
uint32 GetFriendCount() const { return m_unFriendCount; }
RTime32 GetTimeAccountCreated() const { return m_rtimeAccountCreated; }
RTime32 GetTimeTwoFactorEnabled() const { return m_rtimeTwoFactorEnabled; }
RTime32 GetTimePhoneVerified() const { return m_rtimePhoneVerified; }
uint64 GetPhoneID() const { return m_unPhoneID; }
#ifdef DBGFLAG_VALIDATE
void Validate( CValidator &validator, const char *pchName );
#endif
private:
CUtlConstString m_sAccountName;
CUtlConstString m_sCurrency;
RTime32 m_rtimeCached;
uint32 m_unPackage;
RTime32 m_rtimeVACBanEnd;
uint32 m_unSteamLevel;
uint32 m_unFriendCount;
RTime32 m_rtimeAccountCreated;
RTime32 m_rtimeTwoFactorEnabled;
RTime32 m_rtimePhoneVerified;
uint64 m_unPhoneID;
bool
m_bValid:1,
m_bPublicProfile:1,
m_bPublicInventory:1,
m_bVacBanned:1,
m_bCyberCafe:1,
m_bSchoolAccount:1,
m_bFreeTrialAccount:1,
m_bSubscribed:1,
m_bLowViolence:1,
m_bLimited:1,
m_bAccountLocked:1,
m_bCommunityBanned:1,
m_bTradeBanned:1,
m_bIsSteamGuardEnabled:1,
m_bIsPhoneVerified:1,
m_bIsTwoFactorAuthEnabled:1,
m_bIsPhoneIdentifying:1;
};
class CCachedPersonaName
{
public:
CCachedPersonaName();
~CCachedPersonaName();
void Init( const char *pchPersonaName );
void Reset();
bool BIsExpired() const;
bool BIsValid() const;
bool BIsLoading() const;
void SetPreloading();
void AddLoadingRef();
void ReleaseLoadingRef();
const char *GetPersonaName() const;
#ifdef DBGFLAG_VALIDATE
void Validate( CValidator &validator, const char *pchName );
#endif
private:
CUtlConstString m_sPersonaName;
RTime32 m_rtimeCached;
int32 m_nLoading;
bool m_bPreloading;
};
//-----------------------------------------------------------------------------
// Purpose: Manages requests for CAccountDetails objects
//-----------------------------------------------------------------------------
class CAccountDetailsManager
{
public:
CAccountDetailsManager();
CAccountDetails *YieldingGetAccountDetails( const CSteamID &steamID, bool bForceReload = false );
void PreloadPersonaName( const CSteamID &steamID );
const char *YieldingGetPersonaName( const CSteamID &steamID );
void ClearCachedPersonaName( const CSteamID &steamID );
void MarkFrame();
bool BExpireRecords( CLimitTimer &limitTimer );
void Dump() const;
private:
friend class CGCJobSendGetAccountDetailsRequest;
bool BFindAccountDetailsInLocalCache( const CSteamID &steamID, CAccountDetails **ppAccount );
void WakeWaitingAccountDetailsJobs( const CSteamID &steamID );
CTHash<CAccountDetails, uint32> m_hashAccountDetailsCache;
CUtlHashMapLarge<CSteamID, CCopyableUtlVector<JobID_t> > m_mapQueuedAccountDetailsRequests;
friend class CGCJobSendGetPersonaNamesRequest;
void SendBatchedPersonaNamesRequest();
CCachedPersonaName *FindOrCreateCachedPersonaName( const CSteamID &steamID );
void CachePersonaName( const CSteamID &steamID, const char *pchPersonaName );
void CachePersonaNameFailure( const CSteamID &steamID );
void WakeWaitingPersonaNameJobs( const CSteamID &steamID );
CUtlVector<CSteamID> m_vecPendingPersonaNameLookups;
CTHash<CCachedPersonaName, uint32> m_hashPersonaNameCache;
CUtlHashMapLarge<CSteamID, CCopyableUtlVector<JobID_t> > m_mapQueuedPersonaNameRequests;
};
} // namespace GCSDK
#endif // ACCOUNTDETAILS_H