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

PduEventHost.cpp 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #include "StdAfx.h"
  2. #include "PduEventHost.h"
  3. #include "NetRepInterface.h"
  4. CPduEventHost::CPduEventHost(void)
  5. {
  6. }
  7. CPduEventHost::~CPduEventHost(void)
  8. {
  9. }
  10. /*****************************************************************
  11. **【函数名称】 RegLinkProc
  12. **【函数功能】 订阅连接管理事件
  13. **【参数】 a_pLinkProc 要对事件进行处理的接口类
  14. bIsInsert 添加/删除定阅
  15. **【返回值】
  16. ****************************************************************/
  17. BOOL CPduEventHost::RegLinkProc(IPduLinkProc* a_pLinkProc, BOOL bIsInsert)
  18. {
  19. if(bIsInsert) // 添加定阅
  20. {
  21. m_listPduLinkProc.AddTail(a_pLinkProc);
  22. }
  23. else // 删除定阅
  24. {
  25. POSITION pos = m_listPduLinkProc.GetHeadPosition();
  26. while(pos != NULL)
  27. {
  28. POSITION posPrev = pos;
  29. IPduLinkProc* pNode = m_listPduLinkProc.GetNext(pos);
  30. if(pNode == a_pLinkProc)
  31. {
  32. m_listPduLinkProc.RemoveAt(posPrev);
  33. break;
  34. }
  35. } // end while
  36. } // end if
  37. return TRUE;
  38. }
  39. /*****************************************************************
  40. **【函数名称】 RegCommProc
  41. **【函数功能】 订阅消息通知事件
  42. **【参数】 a_pCommProc 要对事件进行处理的接口类
  43. bIsInsert 添加/删除定阅
  44. **【返回值】
  45. ****************************************************************/
  46. BOOL CPduEventHost::RegCommProc(IPduCommProc* a_pCommProc, BOOL bIsInsert)
  47. {
  48. if(bIsInsert) // 添加定阅
  49. {
  50. m_listPduCommProc.AddTail(a_pCommProc);
  51. }
  52. else // 删除定阅
  53. {
  54. POSITION pos = m_listPduCommProc.GetHeadPosition();
  55. while(pos != NULL)
  56. {
  57. POSITION posPrev = pos;
  58. IPduCommProc* pNode = m_listPduCommProc.GetNext(pos);
  59. if(pNode == a_pCommProc)
  60. {
  61. m_listPduCommProc.RemoveAt(posPrev);
  62. break;
  63. }
  64. } // end while
  65. } // end if
  66. return TRUE;
  67. }
  68. /*****************************************************************
  69. **【函数名称】 OnConnEstablisthed
  70. **【函数功能】 SOCKET连接建立事件处理
  71. **【参数】 linkContent 当前连接信息
  72. **【返回值】
  73. ****************************************************************/
  74. void CPduEventHost::OnLinkStateChanged(PduLinkContent& linkContent)
  75. {
  76. // 通知观查者
  77. POSITION pos = m_listPduLinkProc.GetHeadPosition();
  78. while(pos != NULL)
  79. {
  80. IPduLinkProc* pLinkProc = m_listPduLinkProc.GetNext(pos);
  81. pLinkProc->OnLinkStateChanged(linkContent);
  82. } // end while
  83. }
  84. /*****************************************************************
  85. **【函数名称】 OnRecvCommand
  86. **【函数功能】 PDU命令接收事件处理
  87. **【参数】 a_pCmd 命令实体
  88. **【返回值】
  89. ****************************************************************/
  90. void CPduEventHost::OnRecvCommand(CPduEntity* a_pCmd)
  91. {
  92. // 通知观查者
  93. POSITION pos = m_listPduCommProc.GetHeadPosition();
  94. while(pos != NULL)
  95. {
  96. IPduCommProc* pCommProc = m_listPduCommProc.GetNext(pos);
  97. pCommProc->OnRecvCommand(a_pCmd);
  98. } // end while
  99. }