WebServer.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小: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 CAtlMap<CString, RequestHandler, CStringElementTraits<CString> > m_internalpages;
  22. static CAtlMap<CString, UINT, CStringElementTraits<CString> > m_downloads;
  23. static CAtlMap<CStringA, CStringA, CStringElementTraits<CStringA> > m_mimes;
  24. CPath m_webroot;
  25. CAtlMap<CString, CString, CStringElementTraits<CString> > 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. };