#include "StdAfx.h"
#include "ResponseManager.h"

/*
#include "IResponse.h"
#include "FileResponse.h"
#include "DirectoryIndexResponse.h"
*/

CResponseManager::CResponseManager(void)
{
}

CResponseManager::~CResponseManager(void)
{
}


//////////////////////////////////////////////////////////////////////////////////////////////
//	初期化・終了
//////////////////////////////////////////////////////////////////////////////////////////////
/*!
	開始
*/
void CResponseManager::Start(IServerToolIIPtr serverTool)
{
	//	初期化済み？
	if(m_init)
		return;
	m_init = TRUE;

	m_serverTool = serverTool;
/*
	//	ディレクトリレスポンス
	m_responseFactorys.Add(IResponseFactoryRet(new CDirectoryIndexResponseFactory, TRUE));

	//	ファイルレスポンス
	m_responseFactorys.Add(IResponseFactoryRet(new CFileResponseFactory, TRUE));
*/
	//	初期化
	for(int i=0;i<m_responseFactorys.GetSize();i++)
		m_responseFactorys[i]->StartFactory(m_serverTool->GetIServerTool());
}

/*!
	停止
*/
void CResponseManager::Stop()
{
	//	初期化チェック
	if(!m_init)
		return;
	m_init = FALSE;

	//	停止
	for(int i=0;i<m_responseFactorys.GetSize();i++)
		m_responseFactorys[i]->StopFactory();

	m_responseFactorys.RemoveAll();
}


/*!
	レスポンス生成
*/
IResponseIIPtr CResponseManager::GetResponse(CContext context)
{
	SCOPE_LOCK();

	//	検索
	for(int i=0;i<m_responseFactorys.GetSize();i++)
	{
		if(m_responseFactorys[i]->IsYourRequest(context))
			return m_responseFactorys[i]->GetResponse();
	}

	return IResponseIIPtr();	//	NULLを返す
}

