mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-09 18:29:35 +00:00
1
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
//========= 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
|
||||
|
||||
//----------------------------------------------------------------------------------------
|
||||
Reference in New Issue
Block a user