#pragma once
#include <http.h>
class CHttpService;
class CAgvMainDialog;
class IHttpServiceListener
{
public:
	virtual BOOL OnRecvRequest(CHttpService *inst, PHTTP_REQUEST request) = 0;
};

class HttpServiceListener : public IHttpServiceListener
{
public:
	HttpServiceListener(CAgvMainDialog *pParentDlg) { m_pMainDialog = pParentDlg; };
public:
	BOOL OnRecvRequest(CHttpService *inst, PHTTP_REQUEST request);
public:
	CAgvMainDialog *m_pMainDialog;
};

class CHttpService
{
public:
	CHttpService();
	BOOL Create(CString  strIp, INT port, IHttpServiceListener *listener, CAgvMainDialog *pParentDlg);
	BOOL Delete(void);
	BOOL SendRequestResp(HTTP_REQUEST_ID req_id, INT status, LPCSTR reason, LPCSTR type, HANDLE file, LPVOID mem, DWORD mem_size);
	DWORD RecvRequestBody(HTTP_REQUEST_ID req_id, HANDLE file, char *mem, DWORD mem_size);
	BOOL DoReceiveRequests();
	BOOL GetRemoteAddr(PHTTP_REQUEST request, CString &text);
public:
	static UINT AFX_CDECL RecvRequestThread(LPVOID param);
private:
	HANDLE m_req_queue;
	LPBYTE m_req_buffer;
	UINT m_req_buffer_size;
	CWinThread *m_thread;
	IHttpServiceListener *m_listener;
	CAgvMainDialog *m_pMainDialog;
};