/*!
	CResponseControl

	IResponseのラッパ
	実行中の関数名が自動設定される
*/

#pragma once
#include "IServerTool.h"
#include "IConnectionThreadStatus.h"
#include "ModuleInterface.h"
#include "ConnectionToolWrap.h"
#include "BinaryData.h"

class CResponseControl
{
public:
	CResponseControl(void);
	virtual ~CResponseControl(void);

	//!	レスポンス取得
	void LoadResponseModule(CIConnectionToolWrap connectionTool);

	//!	終了
	void FreeResponseModule();

	
	//////////////////////////////////////////////////////////////////////////////////////////////
	//	レスポンス生成
	//////////////////////////////////////////////////////////////////////////////////////////////
	//!	リクエストヘッダ設定
	virtual void SetRequest();

	//!	リクエストボディ設定(繰り返し)
	virtual void SetRequestBody(CBinaryData &body);

	//!	リクエスト完了
	virtual void EndRequest();


	//!	レスポンス生成
	virtual void BuildResponse();


	//!	レスポンスヘッダ取得
	virtual void GetResponse();

	//!	レスポンスボディ取得
	virtual int GetResponseBody(CBinaryData &body, int blockSize);

	//!	レスポンス完了
	virtual void EndResponse();

protected:
	//////////////////////////////////////////////////////////////////////////////////////////////
	//	メンバ変数
	//////////////////////////////////////////////////////////////////////////////////////////////
	//!	接続ツール
	CIConnectionToolWrap 			m_connectionTool;

	//!	スレッドステータス
	IConnectionThreadStatusPtr	m_threadStatus;

	//!	レスポンスモジュール
	CIResponseWrapper			m_response;
};
