//========= Copyright Valve Corporation, All rights reserved. ============//
//
//=======================================================================================//

#ifndef SV_PUBLISHMANAGER_H
#define SV_PUBLISHMANAGER_H
#ifdef _WIN32
#pragma once
#endif

//----------------------------------------------------------------------------------------

#include "baserecordingsessionmanager.h"

//----------------------------------------------------------------------------------------

class CServerRecordingSession;

//----------------------------------------------------------------------------------------

//
// Manages and serializes all replay recording session data on the server
//
class CServerRecordingSessionManager : public CBaseRecordingSessionManager
{
	typedef CBaseRecordingSessionManager BaseClass;

public:
	CServerRecordingSessionManager( IReplayContext *pContext );
	~CServerRecordingSessionManager();

	void					Think();

	const char				*GetNewSessionName() const;

	virtual CBaseRecordingSession *OnSessionStart( int nCurrentRecordingStartTick, const char *pSessionName );
	virtual void			OnSessionEnd();

	void					EnableCleanupOnSessionEnd( bool bState );

	// Offload session data to external fileserver?  Cached once per session based on replay_fileserver_offload_enable.
	bool					ShouldOffload() const		{ return m_bOffload; }

protected:
	//
	// CGenericPersistentManager
	//
	virtual CBaseRecordingSession	*Create();
	virtual int				GetVersion() const;
	virtual bool			ShouldSerializeIndexWithFullPath() { return false; } // On the server, write one file per session
	virtual IReplayContext	*GetReplayContext() const;

	virtual bool			CanDeleteSession( ReplayHandle_t hSession ) const;
	virtual bool			ShouldUnloadSessions() const { return true; }
	virtual void			OnAllSessionsDeleted();

private:
	float					m_flNextScheduledCleanup;
	bool					m_bOffload;
};

//----------------------------------------------------------------------------------------

#endif // SV_PUBLISHMANAGER_H