/*!
	ListenerManager.cpp

	接続受付クラスのマネージャ
*/
#include "StdAfx.h"
#include "ListenerManager.h"
#include "IPv4Listener.h"
//#include "SSLListener.h"


/////////////////////////////////////////////////////////////////////////////////////
//	コンストラクタ
/////////////////////////////////////////////////////////////////////////////////////
CListenerManager::CListenerManager(void)
{
}

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

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

	//	初期化
	m_init = TRUE;

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

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

	//	SSLリスナ使用
/*	if(m_setting.GetEnableSSLListener())
	{
		IListenerAutoPtr	ssl = CSSLListener();
		normal->Start(serverTool.GetIServerTool(), queue);
		m_listeners.Add(ssl);
	}
*/
}

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

	//	全てに通知
	for(int i=0;i<m_listeners.GetCount();i++)
		m_listeners[i]->Stop();

	//	全て削除
	m_listeners.RemoveAll();
}

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

	//	全てに通知
	for(int i=0;i<m_listeners.GetCount();i++)
		m_listeners[i]->ShutdownListen();
}

