#pragma once #include 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; };