升龙物业 老版本 ocx IPO, 加密狗 转值班电话

ClientContainer.h 2.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /*************************************************************************
  2. 【文件名】 ClientContainer.h
  3. 【功能模块和目的】 客户端容器类头文件
  4. 【开发者及日期】 郑石诺 2015/07/19
  5. 【版本】 V1.0.0
  6. 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
  7. 【更改记录】
  8. *************************************************************************/
  9. #pragma once
  10. #include <afxmt.h>
  11. class CNetClient;
  12. class CPduEntity;
  13. /*************************************************************************
  14. 【类名】 CClientContainer
  15. 【功能】
  16. 【接口说明】 客户端容器类
  17. 【开发者及日期】 郑石诺 2015/07/19
  18. 【版本】 V1.0.0
  19. 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
  20. 【更改记录】
  21. *************************************************************************/
  22. class CClientContainer
  23. {
  24. private:
  25. typedef CList<CNetClient*, CNetClient*> ListClient;
  26. public:
  27. CClientContainer(void);
  28. ~CClientContainer(void);
  29. // 业务操作
  30. void insertClient(CNetClient* a_pClient); // 添加一个新的连接
  31. bool removeClient(PDU_DEV_TYPE a_nFarType, int a_nFarId); // 删除一个连接
  32. bool removeClient(SOCKET a_hSocket);
  33. CNetClient* getClient(PDU_DEV_TYPE a_nFarType, int a_nFarId); // 查找连接
  34. CNetClient* getClient(SOCKET a_hSocket);
  35. CNetClient* getClient(CNetClient* a_pClient);
  36. void send2All(CPduEntity* a_pPdu);
  37. void release(void);
  38. void clearClientDeleted(void);
  39. // 事件响应
  40. PDU_LINK_STATE onConnEstablished(CNetClient* a_pClient); // 连接建立
  41. PDU_LINK_STATE onConnFailed(CNetClient* a_pClient); // 连接失败或断开
  42. PDU_LINK_STATE onConnRegistOK(CNetClient* a_pClient); // 注册成功
  43. PDU_LINK_STATE onConnRegistFailed(CNetClient* a_pClient); // 注册失败
  44. private:
  45. void __add2List(CNetClient* a_pClient, ListClient& a_list, CCriticalSection* a_pCs);
  46. void __onConnFailedProc(CNetClient* a_pClient); // SOCKET连接断开/失败的后续处理
  47. void __deleteClient(CNetClient* a_pClient); // 删除指定的客户端
  48. bool __removeClient(CNetClient* a_pClient, ListClient& a_list, CCriticalSection* a_pCs); // 从链表中移除指定的客户端
  49. CNetClient* __lookup(PDU_DEV_TYPE a_nFarType, int a_nFarId, ListClient& a_list, CCriticalSection* a_pCs); // 从LIST中查找指定的连接
  50. CNetClient* __lookup(SOCKET a_hSocket, ListClient& a_list, CCriticalSection* a_pCs);
  51. CNetClient* __lookup(CNetClient* a_pClient, ListClient& a_list, CCriticalSection* a_pCs);
  52. bool __lookup4Delete(PDU_DEV_TYPE a_nFarType, int a_nFarId, ListClient& a_list, CCriticalSection* a_pCs);
  53. bool __lookup4Delete(SOCKET a_hSocket, ListClient& a_list, CCriticalSection* a_pCs);
  54. private:
  55. ListClient m_listConnecting; // 正在连接的客户端
  56. ListClient m_listConnected; // 已连接的客户端
  57. ListClient m_listRegisted; // 可通讯的客户端
  58. ListClient m_ListDeleted; // 要删除的客户端
  59. CCriticalSection m_CS4Connecting;
  60. CCriticalSection m_CS4Connected;
  61. CCriticalSection m_CS4Registed;
  62. CCriticalSection m_Cs4Deleted;
  63. };