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.
83 lines
2.5 KiB
83 lines
2.5 KiB
//========= 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
|
|
|