source-engine/replay/sv_replaycontext.h

135 lines
3.8 KiB
C
Raw Normal View History

2020-04-22 16:56:21 +00:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
//=======================================================================================//
#ifndef SV_REPLAYCONTEXT_H
#define SV_REPLAYCONTEXT_H
#ifdef _WIN32
#pragma once
#endif
//----------------------------------------------------------------------------------------
#include "shared_replaycontext.h"
#include "replay/iserverreplaycontext.h"
#include "sv_recordingsessionmanager.h"
#include "sv_recordingsessionblockmanager.h"
#include "errorsystem.h"
//----------------------------------------------------------------------------------------
class CSessionRecorder;
class CBaseRecordingSessionBlock;
class IRecordingSessionManager;
class IThreadPool;
class CFileserverCleaner;
//----------------------------------------------------------------------------------------
class CServerReplayContext : public IServerReplayContext,
public IErrorReporter
{
public:
LINK_TO_SHARED_REPLAYCONTEXT_IMP();
CServerReplayContext();
~CServerReplayContext();
virtual bool Init( CreateInterfaceFn fnFactory );
virtual void Shutdown();
virtual void Think(); // Called by engine
virtual void OnPublishFailed();
void DoSanityCheckNow();
void UpdateFileserverIPFromHostname( const char *pHostname );
void UpdateFileserverProxyIPFromHostname( const char *pHostname );
//
// IErrorReporter
//
virtual void ReportErrorsToUser( wchar_t *pErrorText );
//
// IServerReplayContext
//
virtual void FlagForConVarSanityCheck();
virtual IGameEvent *CreateReplaySessionInfoEvent();
virtual IReplaySessionRecorder *GetSessionRecorder();
virtual const char *GetLocalFileServerPath() const;
virtual void CreateSessionOnClient( int nClientSlot );
const char *GetServerSubDirName() const;
CSessionRecorder *m_pSessionRecorder;
CFileserverCleaner *m_pFileserverCleaner;
char m_szFileserverIP[16]; // Fileserver's IP, cached any time "replay_fileserver_offload_hostname" is modified.
char m_szFileserverProxyIP[16]; // Proxy's IP, cached any time "replay_fileserver_offload_proxy_host" is modified.
private:
void CleanTmpDir();
void ConVarSanityThink();
float m_flConVarSanityCheckTime;
bool m_bShouldAbortRecording;
};
//----------------------------------------------------------------------------------------
extern CServerReplayContext *g_pServerReplayContext;
//----------------------------------------------------------------------------------------
inline CServerRecordingSessionManager *SV_GetRecordingSessionManager()
{
return static_cast< CServerRecordingSessionManager * >( g_pServerReplayContext->GetRecordingSessionManager() );
}
inline CServerRecordingSessionBlockManager *SV_GetRecordingSessionBlockManager()
{
return static_cast< CServerRecordingSessionBlockManager * >( g_pServerReplayContext->GetRecordingSessionBlockManager() );
}
inline CSessionRecorder *SV_GetSessionRecorder()
{
return g_pServerReplayContext->m_pSessionRecorder;
}
inline CFileserverCleaner *SV_GetFileserverCleaner()
{
return g_pServerReplayContext->m_pFileserverCleaner;
}
inline const char *SV_GetBasePath()
{
return g_pServerReplayContext->m_pShared->m_strBasePath;
}
inline IThreadPool *SV_GetThreadPool()
{
return g_pServerReplayContext->m_pShared->m_pThreadPool;
}
inline char const *SV_GetFileserverIP()
{
return g_pServerReplayContext->m_szFileserverIP;
}
inline char const *SV_GetFileserverProxyIP()
{
return g_pServerReplayContext->m_szFileserverProxyIP;
}
CServerRecordingSession *SV_GetRecordingSessionInProgress();
const char *SV_GetTmpDir(); // Get "replay/server/tmp/"
bool SV_IsOffloadingEnabled();
class CJob;
bool SV_RunJobToCompletion( CJob *pJob ); // NOTE: Adds to thread pool first
//----------------------------------------------------------------------------------------
#endif // SV_REPLAYCONTEXT_H