/*!
	CListenerManager

	接続受付クラスのマネージャ
	接続受付クラスは、このクラスより生成される
*/

#pragma once
#include "Workspace.h"
#include "AcceptedSocketQueue.h"
#include "Listener.h"


/*!
	リスナ管理クラス
*/
class CListenerManager
{
public:
	CListenerManager(void);
	virtual ~CListenerManager(void);

	/////////////////////////////////////////////////////////////////////////////////////
	//	操作
	/////////////////////////////////////////////////////////////////////////////////////
	//!	開始
	void Start(CWorkspaceAccess setting);

	//!	停止
	void Stop();

	//!	停止準備
	void ShutdownListen();

	//!	接続を再開
	void EnableListen(int enable) { m_acceptedQueue.EnableQueue(enable); };

	//!	オーバーロード状態を取得
	int QueueIsOverload();

	//!	キュー取得
	IAcceptedSockeQueueAccess *GetIAcceptedSockeQueueAccess() { return m_acceptedQueue.GetIAcceptedSockeQueueAccesse(); };

protected:
	/////////////////////////////////////////////////////////////////////////////////////
	//	メンバ変数
	/////////////////////////////////////////////////////////////////////////////////////
	//!	初期化フラグ
	CInterlockCounter						m_init;

	//!	リスナ(HTTP)
	CListener								m_httpListener;

	//!	リスナ(HTTPS)
	CListener								m_httpsListener;

	//!	キュー
	CAcceptedSocketQueue					m_acceptedQueue;

	//!	オーバーロード設定
	int										m_overloadThreshold;
};
