#pragma once
#include "InternalInterfaceTemplate.h"

enum FUNCTION_ID
{
	FUNCTION_UNKNOWN					= 0,

	//	レスポンスモジュール用
	FUNCTION_RESPONSE_START				= 1000,
	FUNCTION_RESPONSE_STOP				= 1010,

	FUNCTION_RESPONSE_SET_REQUEST		= 1100,
	FUNCTION_RESPONSE_SET_REQUEST_BODY	= 1110,
	FUNCTION_RESPONSE_END_REQUEST		= 1120,

	FUNCTION_RESPONSE_BUILD_RESPONSE	= 1200,

	FUNCTION_RESPONSE_GET_RESPONSE		= 1300,
	FUNCTION_RESPONSE_GET_RESPONSE_BODY	= 1310,
	FUNCTION_RESPONSE_END_RESPONSE		= 1320,

	//	フィルタモジュール用
	FUNCTION_FILTER_START				= 2000,
	FUNCTION_FILTER_STOP				= 2010,

	FUNCTION_FILTER_REQUEST_HEADER		= 2100,
	FUNCTION_FILTER_REQUEST_BODY		= 2110,
	FUNCTION_FILTER_END_REQUEST			= 2120,

	FUNCTION_FILTER_BUILD_RESPONSE		= 2200,

	FUNCTION_FILTER_RESPONSE_HEADER		= 2300,
	FUNCTION_FILTER_RESPONSE_BODY		= 2310,
	FUNCTION_FILTER_END_RESPONSE		= 2320,

	FUNCTION_FILTER_SERVER_RESPONSE		= 2400,

	//	ユーザー定義用
	FUNCTION_USER_DEFINE_START			= 1000000,
};


//!	インターフェース定義
class IConnectionThreadStatus;
DEFINE_INTERNAL_INTERFACE_NOWRAP(IConnectionThreadStatus);

/*!
	接続スレッドの状態を取得する
*/
class IConnectionThreadStatus
{
public:
	virtual ~IConnectionThreadStatus(void)
	{
	}

	//!	取得
	virtual IConnectionThreadStatusIIPtr GetIConnectionThreadStatus() = 0;

	//!	中断イベント取得
	virtual HANDLE GetBreakEvent() = 0;

	//!	中断?
	virtual int GetBreak() = 0;

	//!	処理中のフィルタ情報を設定する
	virtual void SetCurrentModuleFunction(LPCTSTR moduleName, int functionID) = 0;
};

