source-engine/replay/baserecordingsession.h

98 lines
3.3 KiB
C
Raw Permalink Normal View History

2020-04-22 16:56:21 +00:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
//=======================================================================================//
#ifndef BASERECORDINGSESSION_H
#define BASERECORDINGSESSION_H
#ifdef _WIN32
#pragma once
#endif
//----------------------------------------------------------------------------------------
#include "tier0/platform.h"
#include "utlstring.h"
#include "utllinkedlist.h"
#include "replay/replayhandle.h"
#include "replay/basereplayserializeable.h"
#include "replay/irecordingsession.h"
#include "UtlSortVector.h"
//----------------------------------------------------------------------------------------
class CBaseRecordingSessionBlock;
class KeyValues;
class IReplayContext;
//----------------------------------------------------------------------------------------
// A recording session (e.g. round), including a list of blocks
class CBaseRecordingSession : public CBaseReplaySerializeable,
public IRecordingSession
{
typedef CBaseReplaySerializeable BaseClass;
public:
CBaseRecordingSession( IReplayContext *pContext );
~CBaseRecordingSession();
//
// IRecordingSession
//
virtual void AddBlock( CBaseRecordingSessionBlock *pBlock );
virtual bool Read( KeyValues *pIn );
virtual void Write( KeyValues *pOut );
virtual const char *GetSubKeyTitle() const;
virtual const char *GetPath() const;
virtual void OnDelete();
virtual void OnUnload();
const char *GetSessionInfoURL() const;
virtual void PopulateWithRecordingData( int nCurrentRecordingStartTick );
void OnStopRecording() { m_bRecording = false; }
class CLessFunctor
{
public:
bool Less( const CBaseRecordingSessionBlock *pSrc1, const CBaseRecordingSessionBlock *pSrc2, void *pContext );
};
typedef CUtlSortVector< CBaseRecordingSessionBlock *, CLessFunctor > BlockContainer_t;
inline int GetNumBlocks() const { return m_vecBlocks.Count(); }
void AddBlock( CBaseRecordingSessionBlock *pBlock, bool bFlagForFlush );
int FindBlock( CBaseRecordingSessionBlock *pBlock ) const; // Returns -1 on fail
const BlockContainer_t &GetBlocks() const { return m_vecBlocks; }
// Determines whether or not a session gets nuked at the end of a round or not.
virtual bool ShouldDitchSession() const;
// Dynamically load blocks
void LoadBlocksForSession();
void DeleteBlocks();
// Persistent:
bool m_bRecording; // Is this session currently recording?
CUtlString m_strName; // A unique session name, given by the server at the start of recording based on time/date
CUtlString m_strBaseDownloadURL; // The download URL, with no filename, e.g., "http://someserver:80/somepath/"
int m_nServerStartRecordTick; // The tick at which the server began recording the given session (based on g_ServerGlobalVariables.tickcount) -
// which is the tick client spawn/death ticks are relative to
float m_flStartTime;
// Non-persistent:
IReplayContext *m_pContext;
bool m_bAutoDelete; // Set to true if a session is removed while it's recording - if flagged, session will auto-delete once recording ends
bool m_bBlocksLoaded;
protected:
BlockContainer_t m_vecBlocks; // A list of session blocks for the given session - NOTE: Blocks should not be free'd
};
//----------------------------------------------------------------------------------------
#endif // BASERECORDINGSESSION_H