/*!
	CServerStatusManager

	サーバステータスマネージャ
	各モジュールの出力するステータス情報を保管する
*/

#pragma once
#include "ServerStatus.h"
#include "IServerTool.h"
#include "SyncObject.h"
#include "SystemLogManager.h"

class CServerStatusManager
{
public:
	CServerStatusManager(void);
	virtual ~CServerStatusManager(void);

	///////////////////////////////////////////////////////////////////////////////////////////////////
	//	操作
	///////////////////////////////////////////////////////////////////////////////////////////////////
	//!	開始
	void Start(IServerToolIIPtr serverTool);

	//!	停止
	void Stop();

	//!	サーバステータスの変更
	void WriteSystemLog(CString callerName, int statusCode, CString statusInfo, int autoOffTime = -1);

	//!	サーバステータスの変更
	void SetServerStatusInt(CString statusName, int status, CString statusInfo = "") {};

	//!	サーバステータスの変更
	void SetServerStatusStr(CString statusName, CString status, CString statusInfo = "") {};

	///////////////////////////////////////////////////////////////////////////////////////////////////
	//	取得
	///////////////////////////////////////////////////////////////////////////////////////////////////
	//!	ステータス取得
	CServerStatus &GetStatus() { return m_serverStatus; };

protected:
	///////////////////////////////////////////////////////////////////////////////////////////////////
	//	メンバ変数
	///////////////////////////////////////////////////////////////////////////////////////////////////
	//!	クリティカルセクション
	CCriticalSection	m_scopeLock;

	//!	ステータス保持
	CWorkspace			m_statusRoot;

	//!	サーバステータス
	CServerStatus		m_serverStatus;

	//!	初期化フラグ
	CInterlockCounter	m_init;

	//!	システムログ
	CSystemLogManager	m_systemLog;
};
