#include "StdAfx.h"
#include "ListenerManager.h"
#include "NormalListener.h"
#include "SSLListener.h"

CListenerManager::CListenerManager(void)
{
}

CListenerManager::~CListenerManager(void)
{
	Stop();
}

/////////////////////////////////////////////////////////////////////////////////////
//	操作
/////////////////////////////////////////////////////////////////////////////////////
/*!
	開始
*/
void CListenerManager::Start(IServerToolPtr serverTool, IClientConnectionQueuePtr queue)
{
	ASSERT(!m_init);

	//	初期化
	m_init = TRUE;

	//	設定取得
	m_setting = serverTool->GetManagerSetting(m_setting.GetSettingName());

	//	ノーマルリスナ使用
	if(m_setting.GetEnableNormalListener())
	{
		IListenerPtr	normal = IListenerRet(new CNormalListener(), TRUE);
		normal->Start(serverTool->GetIServerTool(), queue->GetIClientConnectionQueue());
		m_listeners.Add(normal);
	}

	//	SSLリスナ使用
	if(m_setting.GetEnableSSLListener())
	{
		IListenerPtr	normal = IListenerRet(new CSSLListener(), TRUE);
		normal->Start(serverTool->GetIServerTool(), queue->GetIClientConnectionQueue());
		m_listeners.Add(normal);
	}

}

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

	for(int i=0;i<m_listeners.GetSize();i++)
		m_listeners[i]->Stop();
	m_listeners.RemoveAll();
}

/*!
	停止準備
*/
void CListenerManager::ShutdownListen()
{
	if(!m_init)
		return;

	for(int i=0;i<m_listeners.GetSize();i++)
		m_listeners[i]->ShutdownListen();
}

