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
3.0 KiB
107 lines
3.0 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
//=======================================================================================// |
|
|
|
#include "sv_recordingsessionmanager.h" |
|
#include "baserecordingsessionblock.h" |
|
#include "sv_replaycontext.h" |
|
#include "sv_recordingsession.h" |
|
#include "replaysystem.h" |
|
#include "KeyValues.h" |
|
#include "replay/replayutils.h" |
|
#include "filesystem.h" |
|
#include "iserver.h" |
|
#include "sv_filepublish.h" |
|
#include <time.h> |
|
#include "vprof.h" |
|
#include "sv_fileservercleanup.h" |
|
#include "sv_sessionrecorder.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include "tier0/memdbgon.h" |
|
|
|
//---------------------------------------------------------------------------------------- |
|
|
|
#define VERSION_SERVERRECORDINGSESSIONMANAGER 0 |
|
|
|
//---------------------------------------------------------------------------------------- |
|
|
|
CServerRecordingSessionManager::CServerRecordingSessionManager( IReplayContext *pContext ) |
|
: CBaseRecordingSessionManager( pContext ), |
|
m_flNextScheduledCleanup( 0.0f ), |
|
m_bOffload( false ) |
|
{ |
|
} |
|
|
|
CServerRecordingSessionManager::~CServerRecordingSessionManager() |
|
{ |
|
} |
|
|
|
const char *CServerRecordingSessionManager::GetNewSessionName() const |
|
{ |
|
// Setup filename for the session |
|
tm today; VCRHook_LocalTime( &today ); |
|
return Replay_va( |
|
"%04i%02i%02i-%02i%02i%02i-%s", |
|
1900 + today.tm_year, today.tm_mon+1, today.tm_mday, |
|
today.tm_hour, today.tm_min, today.tm_sec, |
|
g_pEngine->GetGameServer()->GetMapName() |
|
); |
|
} |
|
|
|
void CServerRecordingSessionManager::Think() |
|
{ |
|
VPROF_BUDGET( "CServerRecordingSessionManager::Think", VPROF_BUDGETGROUP_REPLAY ); |
|
|
|
BaseClass::Think(); |
|
} |
|
|
|
CBaseRecordingSession *CServerRecordingSessionManager::Create() |
|
{ |
|
return new CServerRecordingSession( m_pContext ); |
|
} |
|
|
|
int CServerRecordingSessionManager::GetVersion() const |
|
{ |
|
return VERSION_SERVERRECORDINGSESSIONMANAGER; |
|
} |
|
|
|
IReplayContext *CServerRecordingSessionManager::GetReplayContext() const |
|
{ |
|
return g_pServerReplayContext; |
|
} |
|
|
|
bool CServerRecordingSessionManager::CanDeleteSession( ReplayHandle_t hSession ) const |
|
{ |
|
const CBaseRecordingSession *pSession = FindSession( hSession ); AssertMsg( pSession, "The session should always be valid here!" ); |
|
return !pSession->IsLocked(); |
|
} |
|
|
|
void CServerRecordingSessionManager::OnAllSessionsDeleted() |
|
{ |
|
SV_GetFileserverCleaner()->DoCleanAsynchronous(); |
|
} |
|
|
|
CBaseRecordingSession *CServerRecordingSessionManager::OnSessionStart( int nCurrentRecordingStartTick, const char *pSessionName ) |
|
{ |
|
CBaseRecordingSession *pResult = BaseClass::OnSessionStart( nCurrentRecordingStartTick, pSessionName ); |
|
|
|
// Cache offload state |
|
m_bOffload = false; |
|
|
|
return pResult; |
|
} |
|
|
|
void CServerRecordingSessionManager::OnSessionEnd() |
|
{ |
|
BaseClass::OnSessionEnd(); |
|
|
|
extern ConVar replay_fileserver_autocleanup; |
|
if ( replay_fileserver_autocleanup.GetBool() ) |
|
{ |
|
// Cleanup expired sessions/blocks now |
|
SV_DoFileserverCleanup( false, g_pBlockSpewer ); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------------------
|
|
|