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. ============//
//
//=======================================================================================//
#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
//----------------------------------------------------------------------------------------
|