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.
97 lines
3.3 KiB
97 lines
3.3 KiB
//========= 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
|