/*!
	サーバツールインタフェース
*/

#pragma once
#include "InternalInterfaceTemplate.h"
#include "Workspace.h"
#include "ServerStatus.h"

//!	インターフェース宣言
class IServerTool;
class IResponseManager;
class IFilterManager;
DEFINE_INTERNAL_INTERFACE_NOWRAP(IServerTool);
DEFINE_INTERNAL_INTERFACE_NOWRAP(IResponseManager);	//	IServerToolで使用しているため、ここで定義
DEFINE_INTERNAL_INTERFACE_NOWRAP(IFilterManager);	//	IServerToolで使用しているため、ここで定義


//!	サーバステータスコード
enum
{
	SERVER_STATUS_NORMAL		= 10,
	SERVER_STATUS_NORMAL_LOG	= 0,
	SERVER_STATUS_WARNING		= -10,
	SERVER_STATUS_ERROR			= -20,
	SERVER_STATUS_FATAL_ERROR	= -30,
};


/*!
	サーバ内部用ツール
*/
class IServerTool
{
public:
	//!	デストラクタ
	virtual ~IServerTool() {};

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//	設定
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//!	マネージャの個別設定を取得
	virtual CWorkspaceAccess GetManagerSetting(CString section) = 0;

	//!	フィルタの個別設定を取得
	virtual CWorkspaceAccess GetFilterSetting(CString section) = 0;

	//!	レスポンスの個別設定を取得
	virtual CWorkspaceAccess GetResponseSetting(CString section) = 0;

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//	ステータス・ログ
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//!	サーバログの書き込み
	virtual void WriteSystemLog(CString callerName, int statusCode, CString statusInfo, int autoOffTime = -1) = 0;

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

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

	//!	現在のサーバステータスを取得
	virtual CServerStatus GetServerStatus() = 0;

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//	インターフェース取得
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//!	サーバーツールを新規に取得
	virtual IServerToolIIPtr GetIServerTool() = 0;

	//!	レスポンスマネージャ取得
	virtual IResponseManagerIIPtr GetIResponseManager() = 0;

	//!	フィルタマネージャ取得
	virtual IFilterManagerIIPtr GetIFilterManager() = 0;
};




/*!
	サーバ操作用
*/
class IServerControl
{
public:
	//!	デストラクタ
	virtual ~IServerControl() {};

	//!	サーバの開始
	virtual void StartServer() = 0;

	//!	サーバの停止
	virtual void StopServer() = 0;

	//!	現在のサーバステータスを取得
	virtual CServerStatus GetServerStatus() = 0;

	//!	現在の接続ステータス取得
	virtual CWorkspaceAccess GetConnectionInfo() = 0;
};

//!	宣言
DEFINE_INTERNAL_INTERFACE_NOWRAP(IServerControl);
