diff options
Diffstat (limited to 'public/gcsdk/accountdetails.h')
| -rw-r--r-- | public/gcsdk/accountdetails.h | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/public/gcsdk/accountdetails.h b/public/gcsdk/accountdetails.h new file mode 100644 index 0000000..636eddb --- /dev/null +++ b/public/gcsdk/accountdetails.h @@ -0,0 +1,165 @@ +//========= 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 |