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

PduSocketMonitor.cpp 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. // ..\..\..\Public\PduLink\PduSocketMonitor.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "PduSocketMonitor.h"
  5. #include "PduSocket.h"
  6. #include "PduEntity.h"
  7. // CPduSocketMonitor
  8. IMPLEMENT_DYNAMIC(CPduSocketMonitor, CWnd)
  9. CPduSocketMonitor::CPduSocketMonitor(bool IsAutoReconnect) : m_IsAotoReconnect(IsAutoReconnect)
  10. {
  11. CreateEx(0, AfxRegisterWndClass(CS_GLOBALCLASS), "", 0, 0, 0, 0, 0, 0, 0);
  12. // 变量初始化
  13. m_pParent = NULL;
  14. m_nLinkType = PDU_LINK_TYPE_SERVER;
  15. m_strFarIp.Empty();
  16. m_nFarPort = 0;
  17. SetPeerDevInfo(PDU_DEV_TYPE_UNKNOWN, -1);
  18. }
  19. CPduSocketMonitor::~CPduSocketMonitor()
  20. {
  21. DestroyWindow();
  22. }
  23. BEGIN_MESSAGE_MAP(CPduSocketMonitor, CWnd)
  24. ON_WM_TIMER()
  25. END_MESSAGE_MAP()
  26. /*****************************************************************
  27. **【函数名称】 SetLinkType
  28. **【函数功能】 设置连接类型(SOCKET初始化时调用)
  29. **【参数】
  30. **【返回值】
  31. ****************************************************************/
  32. void CPduSocketMonitor::SetLinkType(PDU_LINK_TYPE a_nLinkType)
  33. {
  34. m_nLinkType = a_nLinkType;
  35. }
  36. /*****************************************************************
  37. **【函数名称】 GetLinkType
  38. **【函数功能】 读取连接类型
  39. **【参数】
  40. **【返回值】
  41. ****************************************************************/
  42. PDU_LINK_TYPE CPduSocketMonitor::GetLinkType()
  43. {
  44. return m_nLinkType;
  45. }
  46. /*****************************************************************
  47. **【函数名称】 GetPeerLinkInfo
  48. **【函数功能】 读取SOCKET连接信息
  49. **【参数】
  50. **【返回值】 a_strIp SOCKET对端IP
  51. a_nPort SOCKET对端PORT
  52. ****************************************************************/
  53. void CPduSocketMonitor::GetPeerLinkInfo(CString& a_strIp, int& a_nPort)
  54. {
  55. a_strIp = m_strFarIp;
  56. a_nPort = m_nFarPort;
  57. }
  58. /*****************************************************************
  59. **【函数名称】 SetPeerLinkInfo
  60. **【函数功能】 设置SOCKET连接信息
  61. **【参数】 a_strIp SOCKET对端IP
  62. a_nPort SOCKET对端PORT
  63. **【返回值】
  64. ****************************************************************/
  65. void CPduSocketMonitor::SetPeerLinkInfo(const CString& a_strIp, int a_nPort)
  66. {
  67. m_strFarIp = a_strIp;
  68. m_nFarPort = a_nPort;
  69. }
  70. /*****************************************************************
  71. **【函数名称】 GetPeerDevInfo
  72. **【函数功能】 读取对端设备信息
  73. **【参数】
  74. **【返回值】 a_nDevType 对端设备类型
  75. a_nDevId 对端设备ID
  76. ****************************************************************/
  77. void CPduSocketMonitor::GetPeerDevInfo(PDU_DEV_TYPE& a_nDevType, int& a_nDevId)
  78. {
  79. a_nDevType = m_nPeerDevType;
  80. a_nDevId = m_nPeerDevId;
  81. }
  82. /*****************************************************************
  83. **【函数名称】 SetPeerDevInfo
  84. **【函数功能】 设置对端设备信息
  85. **【参数】 a_nDevType 对端设备类型
  86. a_nDevId 对端设备ID
  87. **【返回值】
  88. ****************************************************************/
  89. void CPduSocketMonitor::SetPeerDevInfo(PDU_DEV_TYPE a_nDevType, int a_nDevId)
  90. {
  91. m_nPeerDevType = a_nDevType;
  92. m_nPeerDevId = a_nDevId;
  93. }
  94. /*****************************************************************
  95. **【函数名称】 OnConnEstablisthed
  96. **【函数功能】 SOCKET连接建立事件处理
  97. **【参数】 a_pSocket 触发事件的SOCKET
  98. **【返回值】
  99. ****************************************************************/
  100. void CPduSocketMonitor::OnConnEstablisthed(CPduSocket* a_pSocket)
  101. {
  102. m_pParent = a_pSocket;
  103. // 设定SOCKET连接地址(用于监控管理)
  104. if(m_nLinkType == PDU_LINK_TYPE_SERVER) // 服务端
  105. {
  106. a_pSocket->GetPeerName(m_strFarIp, m_nFarPort);
  107. }
  108. else // 客户端
  109. {
  110. a_pSocket->Regist(); // 注册连接
  111. } // end if
  112. }
  113. /*****************************************************************
  114. **【函数名称】 OnConnFailed
  115. **【函数功能】 SOCKET连接断开/失败事件处理
  116. **【参数】 a_pSocket 触发事件的SOCKET
  117. **【返回值】
  118. ****************************************************************/
  119. void CPduSocketMonitor::OnConnFailed(CPduSocket* a_pSocket)
  120. {
  121. KillTimer(PDU_LISTEN_TIMER);
  122. if(m_nLinkType == PDU_LINK_TYPE_CLIENT && m_IsAotoReconnect) // 如果是客户端连接,则启动自动重连
  123. {
  124. m_pParent = a_pSocket;
  125. SetTimer(PDU_RECONN_TIMER, VAL_RECONNECT_INTERVAL, NULL); // 启动自动重连定时器
  126. }
  127. }
  128. /*****************************************************************
  129. **【函数名称】 OnConnRegistOK
  130. **【函数功能】 SOCKET连接注册成功事件处理
  131. **【参数】 a_pSocket 触发事件的SOCKET
  132. **【返回值】
  133. ****************************************************************/
  134. void CPduSocketMonitor::OnConnRegistOK(CPduSocket* a_pSocket)
  135. {
  136. // 对OCX以外的所有设备端启用心跳监听
  137. PDU_DEV_TYPE a_nDevType = PDU_DEV_TYPE_UNKNOWN;
  138. int a_nDevId = 0;
  139. m_pParent->GetLocalInfo(a_nDevType,a_nDevId);
  140. if(a_nDevType != PDU_DEV_TYPE_UNKNOWN && a_nDevType != PDU_DEV_TYPE_AGENT)
  141. {
  142. SetTimer(PDU_LISTEN_TIMER, VAL_LISTEN_INTERVAL, NULL);
  143. }
  144. }
  145. /*****************************************************************
  146. **【函数名称】 OnConnRegistFailed
  147. **【函数功能】 SOCKET连接注册失败事件处理
  148. **【参数】 a_pSocket 触发事件的SOCKET
  149. **【返回值】
  150. ****************************************************************/
  151. void CPduSocketMonitor::OnConnRegistFailed(CPduSocket* a_pSocket)
  152. {
  153. }
  154. /*****************************************************************
  155. **【函数名称】 OnTimer
  156. **【函数功能】 自定重连定时器
  157. **【参数】
  158. **【返回值】
  159. ****************************************************************/
  160. void CPduSocketMonitor::OnTimer(UINT_PTR nIDEvent)
  161. {
  162. switch(nIDEvent)
  163. {
  164. case PDU_RECONN_TIMER: // 自动重连
  165. {
  166. KillTimer(PDU_RECONN_TIMER);
  167. m_pParent->Connect(m_strFarIp, m_nFarPort);
  168. }
  169. break;
  170. case PDU_LISTEN_TIMER: // 心跳监听
  171. {
  172. m_pParent->Monitor();
  173. }
  174. break;
  175. } // end switch
  176. CWnd::OnTimer(nIDEvent);
  177. }