#pragma once

#include "Buffer.h"
#include "Config.h"
#include "server.h"


class CResponse
{
public:
	CResponse(CServer *server,CConfigAccess context);
	virtual ~CResponse(void);

	virtual void PreCreateResponse() = 0;				//	1:レスポンス生成準備		
	virtual void SetNextData(CBuffer &data) = 0;		//	2:受信データの設定(繰り返し)
	virtual void CreateResponse() = 0;					//	3:レスポンスの生成
	virtual __int64 GetResponseSize() = 0;				//	4:レスポンスサイズの取得
	virtual CConfigAccess GetResponseInfo();			//	5:レスポンス情報を取得
	virtual int GetNextData(CBuffer &data) = 0;			//	6:レスポンスの取得

	void SetResponseCode(int code);
	static CString GetHTTPResponseString(int code);		//	レスポンス文字列取得

public:
	CConfigAccess	m_context;
	CConfigAccess	m_setting;				//!<	設定
	CConfigAccess	m_serverInfo;			//!<	サーバ情報環境領域
	CConfigAccess	m_requestInfo;			//!<	リクエスト情報
	CConfigAccess	m_requestOptions;		//!<	リクエストオプション情報
	CConfigAccess	m_responseInfo;			//!<	レスポンス情報
	CConfigAccess	m_responseOptions;		//!<	レスポンスオプション情報
	CServer			*m_server;

private:
	void SetupDefaultResponse();
};
