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.
107 lines
2.8 KiB
107 lines
2.8 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
//=======================================================================================// |
|
|
|
#include "sv_sessionpublishmanager.h" |
|
#include "sv_recordingsession.h" |
|
#include "sv_sessionblockpublisher.h" |
|
#include "sv_sessioninfopublisher.h" |
|
#include "replay_dbg.h" |
|
#include "vprof.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include "tier0/memdbgon.h" |
|
|
|
//---------------------------------------------------------------------------------------- |
|
|
|
CSessionPublishManager::CSessionPublishManager( CServerRecordingSession *pSession ) |
|
: m_pSession( pSession ), |
|
m_pBlockPublisher( NULL ), |
|
m_pSessionInfoPublisher( NULL ) |
|
{ |
|
m_pSessionInfoPublisher = new CSessionInfoPublisher( pSession ); |
|
m_pBlockPublisher = new CSessionBlockPublisher( pSession, m_pSessionInfoPublisher ); |
|
} |
|
|
|
CSessionPublishManager::~CSessionPublishManager() |
|
{ |
|
delete m_pBlockPublisher; |
|
delete m_pSessionInfoPublisher; |
|
} |
|
|
|
void CSessionPublishManager::PublishAllSynchronous() |
|
{ |
|
Msg( "Finishing up replay publish...\n" ); |
|
|
|
m_pBlockPublisher->PublishAllSynchronous(); |
|
m_pSessionInfoPublisher->PublishAllSynchronous(); |
|
} |
|
|
|
void CSessionPublishManager::OnStartRecording() |
|
{ |
|
// Lock the session (which will propagate the lock to all contained blocks) |
|
m_pSession->SetLocked( true ); |
|
|
|
Assert( m_pSession->m_bRecording ); |
|
} |
|
|
|
void CSessionPublishManager::OnStopRecord( bool bAborting ) |
|
{ |
|
// Recording should be turned off on the session by this point |
|
Assert( !m_pSession->m_bRecording ); |
|
|
|
m_pBlockPublisher->OnStopRecord( bAborting ); |
|
m_pSessionInfoPublisher->OnStopRecord( bAborting ); |
|
} |
|
|
|
ReplayHandle_t CSessionPublishManager::GetSessionHandle() const |
|
{ |
|
return m_pSession->GetHandle(); |
|
} |
|
|
|
bool CSessionPublishManager::IsDone() const |
|
{ |
|
return !m_pSession->m_bRecording && |
|
m_pBlockPublisher->IsDone() && |
|
m_pSessionInfoPublisher->IsDone(); |
|
} |
|
|
|
void CSessionPublishManager::Think() |
|
{ |
|
// NOTE: This gets called even if replay is disabled. This is intentional. |
|
VPROF_BUDGET( "CSessionPublishManager::Think", VPROF_BUDGETGROUP_REPLAY ); |
|
|
|
// Call publishers |
|
m_pBlockPublisher->Think(); |
|
m_pSessionInfoPublisher->Think(); |
|
|
|
#ifdef _DEBUG |
|
m_pSession->VerifyLocks(); |
|
#endif |
|
} |
|
|
|
void CSessionPublishManager::UnlockSession() |
|
{ |
|
Assert( !m_pSession->m_bRecording ); |
|
Assert( m_pBlockPublisher->IsDone() ); |
|
Assert( m_pSessionInfoPublisher->IsDone() ); |
|
|
|
IF_REPLAY_DBG( Warning( "Unlocking session %s\n", m_pSession->GetDebugName() ) ); |
|
|
|
m_pSession->SetLocked( false ); |
|
} |
|
|
|
void CSessionPublishManager::AbortPublish() |
|
{ |
|
m_pBlockPublisher->AbortPublish(); |
|
m_pSessionInfoPublisher->AbortPublish(); |
|
} |
|
|
|
#ifdef _DEBUG |
|
void CSessionPublishManager::Validate() |
|
{ |
|
m_pBlockPublisher->Validate(); |
|
} |
|
#endif |
|
|
|
//----------------------------------------------------------------------------------------
|
|
|