mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-15 05:06:57 +00:00
1
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
|
||||
#ifndef TF_RATING_DATA_H
|
||||
#define TF_RATING_DATA_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "gcsdk/protobufsharedobject.h"
|
||||
#include "tf_gcmessages.h"
|
||||
#if defined (CLIENT_DLL) || defined (GAME_DLL)
|
||||
#include "gc_clientsystem.h"
|
||||
#endif
|
||||
|
||||
#ifdef GC
|
||||
#include "tf_gc.h"
|
||||
#else
|
||||
#include "tf_matchmaking_shared.h"
|
||||
#endif
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
// Purpose: The shared object that contains a specific MM rating
|
||||
//---------------------------------------------------------------------------------
|
||||
class CTFRatingData : public GCSDK::CProtoBufSharedObject< CSOTFRatingData, k_EProtoObjectTFRatingData, /* bPublicMutable */ false >
|
||||
{
|
||||
public:
|
||||
CTFRatingData();
|
||||
CTFRatingData( uint32 unAccountID, EMMRating eRatingType, const MMRatingData_t &ratingData );
|
||||
|
||||
#ifdef GC
|
||||
CTFRatingData( uint32 unAccountID, EMMRating eRatingType ); // Fills with Default rating for backend
|
||||
#endif
|
||||
|
||||
// Helpers
|
||||
static CTFRatingData *YieldingGetPlayerRatingDataBySteamID( const CSteamID &steamID, EMMRating eRatingType );
|
||||
|
||||
#ifdef GC
|
||||
DECLARE_CLASS_MEMPOOL( CTFRatingData );
|
||||
|
||||
// Mutability is purposefully private, only CTFSharedObjectCache::BYieldingUpdatePlayerRating should be generating
|
||||
// rating changes.
|
||||
friend class CTFSharedObjectCache;
|
||||
|
||||
// Direct database & client shared SO
|
||||
// (Some ratings may not be shared with clients, though)
|
||||
|
||||
virtual bool BIsNetworked() const OVERRIDE { return true; }
|
||||
virtual bool BIsDatabaseBacked() const OVERRIDE { return true; }
|
||||
|
||||
virtual bool BIsKeyLess( const CSharedObject & soRHS ) const OVERRIDE;
|
||||
|
||||
// We purposefully pass false to our template to make Obj() immutable -- these calls currently are just hooked up to
|
||||
// assert. All database writes should go through BYieldingUpdateRatingAndAddToTransaction, or it's SOCache helper.
|
||||
// If we have a need to do arbitrary writes of this type of object we should hook it up in a way that doesn't
|
||||
// encourage mis-use that bypasses audit record creation.
|
||||
virtual bool BYieldingAddInsertToTransaction( GCSDK::CSQLAccess & sqlAccess ) OVERRIDE;
|
||||
virtual bool BYieldingAddWriteToTransaction( GCSDK::CSQLAccess & sqlAccess, const CUtlVector< int > &fields ) OVERRIDE;
|
||||
virtual bool BYieldingAddRemoveToTransaction( GCSDK::CSQLAccess & sqlAccess ) OVERRIDE;
|
||||
|
||||
void WriteToRecord( CSchRatingData *pRatingData ) const;
|
||||
void ReadFromRecord( const CSchRatingData &ladderData );
|
||||
|
||||
// CTFSubscriberMessageFilter allows this type to filter flags on a per-object basis, so we can not send certain
|
||||
// rating types down.
|
||||
uint32_t FilterSendFlags( uint32_t unTypeFlags ) const;
|
||||
|
||||
private:
|
||||
// Updates this rating object and stages writes, including audit entries, to the given transaction. We purposefully
|
||||
// make ourselves not publically mutable to ensure callers go through this path to generate audit records. See
|
||||
// CTFSharedObjectCache::BYieldingUpdatePlayerRating for the SOCache path to calling this.
|
||||
bool BYieldingUpdateRatingAndAddToTransaction( CSQLAccess &transaction,
|
||||
const MMRatingData_t &newData,
|
||||
EMMRatingSource eAdjustmentSource,
|
||||
uint64_t unSourceEventID,
|
||||
RTime32 rtTimestamp );
|
||||
#endif // GC
|
||||
|
||||
// Private on the GC to encourage callers to go through the proper lookup in CTFSharedObjectCache (GC) or
|
||||
// GetLocalPlayerRatingData (client)
|
||||
MMRatingData_t GetRatingData();
|
||||
};
|
||||
|
||||
#endif // TF_RATING_DATA_H
|
||||
Reference in New Issue
Block a user