/*!
	マネージャ実装
*/
#pragma once
#include "IServerExceptionTunnel.h"
#include "ManagedInterfaceRegister.h"
#include "ManagedInterfaceAccess.h"

/*!
	マネージャ用作業ツール
*/
class IManagerToolset
{
public:
	//!	マネージャ登録インタフェース取得
	virtual IManagedInterfaceRegisterPtr GetIManagedInterfaceRegisterPtr() = 0;

	//!	マネージャ利用インタフェース取得
	virtual IManagedInterfaceAccessPtr	GetIManagedInterfaceAccessPtr() = 0;

	//!	初期化例外
	virtual int ThrowServerStartException(IStringPtr callerName, IStringPtr info) = 0;
};
//!	ポインタ型
typedef IManagerToolset*	IManagerToolsetPtr;


/*!
	マネージャ実装
*/
class IManager
{
public:
	//////////////////////////////////////////////////////////////////////////////////////////////
	//	ロード制御(例外発生厳禁！)
	//////////////////////////////////////////////////////////////////////////////////////////////
	//!	依存するモジュールリストの取得
	virtual void GetDependManagerList(IStringListPtr managerList) = 0;

	//////////////////////////////////////////////////////////////////////////////////////////////
	//	初期化・終了(例外発生厳禁！)
	//////////////////////////////////////////////////////////////////////////////////////////////
	//!	初期化
	virtual void Start(IManagerToolsetPtr managerToolset, IServerExceptionTunnel exceptionTunnel) = 0;

	//!	停止
	virtual void Stop(IManagerToolsetPtr managerToolset) = 0;

	//!	開放
	virtual void Delete() = 0;
};
//!	ポインタ型
typedef IManager*	IManagerPtr;

