Team Fortress 2 Source Code as on 22/4/2020
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.
|
|
//========= 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
|