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