WebServer.h
上传用户:tangyu_668
上传日期:2014-02-27
资源大小:678k
文件大小:1k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. #pragma once
  2. #include <afxsock.h>
  3. #include <atlcoll.h>
  4. #define UTF8(str) UTF16To8(TToW(str))
  5. #define UTF8Arg(str) UrlEncode(UTF8(str))
  6. #define CMD_SETPOS "-1"
  7. #define CMD_SETVOLUME "-2"
  8. class CWebServerSocket;
  9. class CWebClientSocket;
  10. class CMainFrame;
  11. class CWebServer
  12. {
  13. CMainFrame* m_pMainFrame;
  14. int m_nPort;
  15. DWORD ThreadProc();
  16.     static DWORD WINAPI StaticThreadProc(LPVOID lpParam);
  17.     DWORD m_ThreadId;
  18.     HANDLE m_hThread;
  19. CAutoPtrList<CWebClientSocket> m_clients;
  20. typedef bool (CWebClientSocket::*RequestHandler)(CStringA& hdr, CStringA& body, CStringA& mime);
  21. static CAtlStringMap<RequestHandler> m_internalpages;
  22. static CAtlStringMap<UINT> m_downloads;
  23. static CAtlStringMap<CStringA, CStringA> m_mimes;
  24. CPath m_webroot;
  25. CAtlStringMap<> m_cgi;
  26. bool CallCGI(CWebClientSocket* pClient, CStringA& hdr, CStringA& body, CStringA& mime);
  27. public:
  28. CWebServer(CMainFrame* pMainFrame, int nPort = 13579);
  29. virtual ~CWebServer();
  30. static void Deploy(CString dir);
  31. bool ToLocalPath(CString& path, CString& redir);
  32. bool LoadPage(UINT resid, CStringA& str, CString path = _T(""));
  33. void OnAccept(CWebServerSocket* pServer);
  34. void OnClose(CWebClientSocket* pClient);
  35. void OnRequest(CWebClientSocket* pClient, CStringA& reshdr, CStringA& resbody);
  36. };