diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /replay/sv_sessionblockpublisher.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'replay/sv_sessionblockpublisher.h')
| -rw-r--r-- | replay/sv_sessionblockpublisher.h | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/replay/sv_sessionblockpublisher.h b/replay/sv_sessionblockpublisher.h new file mode 100644 index 0000000..c9cfcf8 --- /dev/null +++ b/replay/sv_sessionblockpublisher.h @@ -0,0 +1,83 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +//=======================================================================================// + +#ifndef SV_SESSIONBLOCKPUBLISHER_H +#define SV_SESSIONBLOCKPUBLISHER_H +#ifdef _WIN32 +#pragma once +#endif + +//---------------------------------------------------------------------------------------- + +#include "sv_filepublish.h" +#include "replay/replayhandle.h" + +//---------------------------------------------------------------------------------------- + +class CServerRecordingSession; +class CServerRecordingSessionBlock; +class CSessionInfoPublisher; +class IDemoBuffer; + +//---------------------------------------------------------------------------------------- + +class CSessionBlockPublisher : public IPublishCallbackHandler +{ +public: + CSessionBlockPublisher( CServerRecordingSession *pSession, CSessionInfoPublisher *pSessionInfoPublisher ); + ~CSessionBlockPublisher(); + + void Think(); // Called explicitly + + // Finish any publish jobs synchronously + void PublishAllSynchronous(); + + // Abort any publishing + void AbortPublish(); + + // Have all publish job completed? + bool IsDone() const; + + // This will flag this publish manager as recording + void OnStartRecording(); + + // This will write out and publish any final session block + void OnStopRecord( bool bAborting ); + + // Get the handle for the associated session + ReplayHandle_t GetSessionHandle() const; + +#ifdef _DEBUG + void Validate(); +#endif + +private: + // + // IPublishCallback + // + virtual void OnPublishComplete( const IFilePublisher *pPublisher, void *pUserData ); + virtual void OnPublishAborted( const IFilePublisher *pPublisher ); + virtual void AdjustHeader( const IFilePublisher *pPublisher, void *pHeaderData ) {} + + void PublishBlock( CServerRecordingSessionBlock *pBlock ); + + void WriteAndPublishSessionBlock(); + void PublishThink(); + void WriteSessionBlockThink(); + void SessionLockThink(); + void GatherBlockData( uint8 *pSessionBuffer, int nSessionBufferSize, CServerRecordingSessionBlock *pBlock, + unsigned char **ppBlockData, int *pBlockSize ); + CServerRecordingSessionBlock *FindBlockFromPublisher( const IFilePublisher *pPublisher ); + + float m_flLastBlockWriteTime; + int m_nDumpInterval; + CUtlLinkedList< CServerRecordingSessionBlock *, int > m_lstPublishingBlocks; + + CServerRecordingSession *m_pSession; + CSessionInfoPublisher *m_pSessionInfoPublisher; +}; + +//---------------------------------------------------------------------------------------- + +#endif // SV_SESSIONBLOCKPUBLISHER_H |