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.
94 lines
2.8 KiB
94 lines
2.8 KiB
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
//=======================================================================================//
|
|
|
|
#ifndef CL_RECORDINGSESSIONMANAGER_H
|
|
#define CL_RECORDINGSESSIONMANAGER_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
//----------------------------------------------------------------------------------------
|
|
|
|
#include "baserecordingsessionmanager.h"
|
|
#include "igameevents.h"
|
|
#include "replaysystem.h"
|
|
#include "replay/shared_defs.h"
|
|
|
|
//----------------------------------------------------------------------------------------
|
|
|
|
//
|
|
// Manages and serializes all replay recording session data on the client
|
|
//
|
|
class CClientRecordingSessionManager : public CBaseRecordingSessionManager,
|
|
public IGameEventListener2
|
|
{
|
|
typedef CBaseRecordingSessionManager BaseClass;
|
|
|
|
public:
|
|
CClientRecordingSessionManager( IReplayContext *pContext );
|
|
~CClientRecordingSessionManager();
|
|
|
|
virtual bool Init();
|
|
|
|
void CleanupUnneededBlocks();
|
|
|
|
virtual CBaseRecordingSession *OnSessionStart( int nCurrentRecordingStartTick, const char *pSessionName );
|
|
virtual void OnSessionEnd();
|
|
|
|
void ClearServerRecordingState() { m_ServerRecordingState.Clear(); }
|
|
void OnReplayDeleted( CReplay *pReplay );
|
|
void OnReplaysLoaded();
|
|
|
|
//
|
|
// CGenericPersistentManager
|
|
//
|
|
virtual CBaseRecordingSession *Create();
|
|
|
|
struct ServerRecordingState_t
|
|
{
|
|
ServerRecordingState_t() { Clear(); }
|
|
void Clear() { m_strSessionName = ""; m_nDumpInterval = m_nCurrentBlock = m_nStartTick = 0; }
|
|
|
|
CUtlString m_strSessionName; // Name of current recording session
|
|
int m_nDumpInterval; // The interval at which the server is dumping partial replays
|
|
int m_nCurrentBlock; // Current session block being written to on the server (approximation - may be ahead but never behind)
|
|
int m_nStartTick; // The tick on the server when the session began - used to calculate an adjusted spawn tick on the client
|
|
|
|
bool IsValid()
|
|
{
|
|
return !m_strSessionName.IsEmpty() &&
|
|
m_nDumpInterval >= MIN_SERVER_DUMP_INTERVAL &&
|
|
m_nDumpInterval <= MAX_SERVER_DUMP_INTERVAL;
|
|
}
|
|
}
|
|
m_ServerRecordingState;
|
|
|
|
private:
|
|
//
|
|
// CGenericPersistentManager
|
|
//
|
|
virtual int GetVersion() const;
|
|
virtual void Think();
|
|
virtual IReplayContext *GetReplayContext() const;
|
|
virtual void OnObjLoaded( CBaseRecordingSession *pSession );
|
|
|
|
//
|
|
// IRecordingSessionManager
|
|
//
|
|
virtual const char *GetNewSessionName() const;
|
|
virtual void FireGameEvent( IGameEvent *pEvent );
|
|
|
|
void AddEventsForListen();
|
|
void DownloadThink();
|
|
|
|
float m_flNextBlockUpdateTime;
|
|
float m_flNextPossibleDownloadTime;
|
|
|
|
int m_nNumSessionBlockDownloaders; // TODO: Manage the number of session block downloaders
|
|
};
|
|
|
|
//----------------------------------------------------------------------------------------
|
|
|
|
|
|
#endif // CL_RECORDINGSESSIONMANAGER_H
|