//========= Copyright Valve Corporation, All rights reserved. ============// // //=======================================================================================// #ifndef BASERECORDINGSESSIONMANAGER_H #define BASERECORDINGSESSIONMANAGER_H #ifdef _WIN32 #pragma once #endif //---------------------------------------------------------------------------------------- #include "tier0/platform.h" #include "utlstring.h" #include "utllinkedlist.h" #include "replay/replayhandle.h" #include "replay/irecordingsessionmanager.h" #include "genericpersistentmanager.h" //---------------------------------------------------------------------------------------- class CBaseRecordingSession; class CBaseRecordingSessionBlock; class KeyValues; class IReplayContext; //---------------------------------------------------------------------------------------- // // Manages and serializes all replay recording session data - instanced on both the client // and server via CClientRecordingSessionManager and CServerRecordingSessionManager. // class CBaseRecordingSessionManager : public CGenericPersistentManager< CBaseRecordingSession >, public IRecordingSessionManager { typedef CGenericPersistentManager< CBaseRecordingSession > BaseClass; public: CBaseRecordingSessionManager( IReplayContext *pContext ); virtual ~CBaseRecordingSessionManager(); virtual bool Init(); virtual CBaseRecordingSession *OnSessionStart( int nCurrentRecordingStartTick, const char *pSessionName ); virtual void OnSessionEnd(); void DeleteSession( ReplayHandle_t hSession, bool bForce ); const char *GetCurrentSessionName() const; int GetCurrentSessionBlockIndex() const; CBaseRecordingSession *FindSessionByName( const char *pSessionName ); // This is here so that server-side cleanup can be done for a ditched session. See calling code for details. void DoSessionCleanup(); // // IRecordingSessionManager // virtual CBaseRecordingSession *FindSession( ReplayHandle_t hSession ); virtual const CBaseRecordingSession *FindSession( ReplayHandle_t hSession ) const; virtual void FlagSessionForFlush( CBaseRecordingSession *pSession, bool bForceImmediate ); virtual int GetServerStartTickForSession( ReplayHandle_t hSession ); // Get the recording session in progress CBaseRecordingSession *GetRecordingSessionInProgress() { return m_pRecordingSession; } bool LastSessionDitched() const { return m_bLastSessionDitched; } protected: // // CGenericPersistentManager // virtual const char *GetIndexFilename() const { return "sessions." GENERIC_FILE_EXTENSION; } virtual const char *GetRelativeIndexPath() const; virtual const char *GetDebugName() const { return "session manager"; } virtual void Think(); // // CBaseThinker // virtual float GetNextThinkTime() const; IReplayContext *m_pContext; CBaseRecordingSession *m_pRecordingSession; // Currently recording session, or NULL if not recording bool m_bLastSessionDitched; virtual bool CanDeleteSession( ReplayHandle_t hSession ) const { return true; } virtual bool ShouldUnloadSessions() const { return false; } virtual void OnAllSessionsDeleted() {} private: void DeleteSessionThink(); void MarkSessionForDelete( ReplayHandle_t hSession ); CUtlLinkedList< ReplayHandle_t, int > m_lstSessionsToDelete; }; //---------------------------------------------------------------------------------------- #endif // BASERECORDINGSESSIONMANAGER_H