LocalServer.h
上传用户:liguizhu
上传日期:2015-11-01
资源大小:2422k
文件大小:3k
源码类别:

P2P编程

开发平台:

Visual C++

  1. /*
  2.  *  Openmysee
  3.  *
  4.  *  This program is free software; you can redistribute it and/or modify
  5.  *  it under the terms of the GNU General Public License as published by
  6.  *  the Free Software Foundation; either version 2 of the License, or
  7.  *  (at your option) any later version.
  8.  *
  9.  *  This program is distributed in the hope that it will be useful,
  10.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  *  GNU General Public License for more details.
  13.  *
  14.  *  You should have received a copy of the GNU General Public License
  15.  *  along with this program; if not, write to the Free Software
  16.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17.  *
  18.  */
  19. #ifndef __LOCALSERVER_H_
  20. #define __LOCALSERVER_H_
  21. #include "ChannelMgr.h"
  22. #include "ChaosUI.h"
  23. #include "MsgMgr.h"
  24. #define LOCALSERVERPORT 11668
  25. #define MAX_PENDING_SOCKET 255
  26. #define USE_NAT 0
  27. // { Declaration of CLocalServer
  28. //local server将处理WM_SENDTOLOCALSERVER消息 WM是消息case, LM待定
  29. #define CASE_THREAD_EXIT    4
  30. class CLocalServer
  31. {
  32. public:
  33. static CLocalServer *CreateInstance();
  34. static void DeleteInstance();
  35. private:
  36.     long    m_ThreadRef;
  37. public:
  38.         //      对每一个使用了在主线程建立的窗口的线程, 都应该调用该函数进行注册,并在线程退出时发送WM_SENDTOLOCALSERVER消息,
  39.         //      case为CASE_THREAD_EXIT,以便系统能对窗口资源进行回收而不至于死锁
  40.     void    AddWndThreadRef()
  41.     {
  42.         m_ThreadRef++;
  43.     }
  44.     void    FireExit();
  45. void    HandleLocalSrvNotify(WPARAM wparam, LPARAM lparam);
  46. BOOL Run();
  47. void Stop();
  48. BOOL AddChannel(SOCKET sock);
  49. void DeleteChannel(CHANNELID ChannelID);
  50. UINT GetChannelNum();
  51. void GetChannelIDArray(CHANNELID *pChannelIDArray);
  52. void GetChannelMgrArray(CChannelMgr* pChannelMgrArray[]);
  53. CChannelMgr *GetChannelMgr(CHANNELID ChannelID);
  54. void UpdateLayer1Notify(WPARAM wparam, LPARAM lparam);
  55. // CChannelMgr *GetChannelMgr(HWND hWnd);
  56. CMsgMgr* GetMsgMgr();
  57. void UpdateNoChannelMsg();
  58. // friend class CChaosUI;
  59. protected:
  60. CLocalServer();
  61. CLocalServer(const CLocalServer&);
  62. virtual ~CLocalServer();
  63. CLocalServer &operator=(const CLocalServer&);
  64. #if USE_NAT
  65. BOOL InitNatProxy();
  66. BOOL ExitNatProxy();
  67. #endif
  68. BOOL InitNetWork();
  69. static DWORD WINAPI _ConnectProc(LPVOID lpParam);
  70. HANDLE m_hConncetThread;
  71. bool volatile m_bConnStop;
  72. private:
  73. typedef std::map<CHANNELID, CChannelMgr *> ChannelMap;
  74. static CLocalServer *m_pLocalServer;
  75. CCritSec m_MapCritSec;
  76. ChannelMap m_ChannelMap;
  77. UINT m_uChlCounter;
  78. // UINT m_uMsgNum;
  79. SOCKET m_ListenSocket;
  80. DWORD m_dwConnectThreadID;
  81. CMsgMgr m_MsgMgr;
  82. MSGID m_ErrMsgID;
  83. };
  84. // Declaration of CLocalServer }
  85. #endif