mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-23 06:36:54 +00:00
108 lines
2.8 KiB
C++
108 lines
2.8 KiB
C++
|
//========= 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
|
||
|
|
||
|
//----------------------------------------------------------------------------------------
|