| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- // ..\..\..\Public\PduLink\PduSocketMonitor.cpp : 实现文件
- //
- #include "stdafx.h"
- #include "PduSocketMonitor.h"
- #include "PduSocket.h"
- #include "PduEntity.h"
- // CPduSocketMonitor
- IMPLEMENT_DYNAMIC(CPduSocketMonitor, CWnd)
- CPduSocketMonitor::CPduSocketMonitor(bool IsAutoReconnect) : m_IsAotoReconnect(IsAutoReconnect)
- {
- CreateEx(0, AfxRegisterWndClass(CS_GLOBALCLASS), "", 0, 0, 0, 0, 0, 0, 0);
-
- // 变量初始化
- m_pParent = NULL;
- m_nLinkType = PDU_LINK_TYPE_SERVER;
- m_strFarIp.Empty();
- m_nFarPort = 0;
- SetPeerDevInfo(PDU_DEV_TYPE_UNKNOWN, -1);
- }
- CPduSocketMonitor::~CPduSocketMonitor()
- {
- DestroyWindow();
- }
- BEGIN_MESSAGE_MAP(CPduSocketMonitor, CWnd)
- ON_WM_TIMER()
- END_MESSAGE_MAP()
- /*****************************************************************
- **【函数名称】 SetLinkType
- **【函数功能】 设置连接类型(SOCKET初始化时调用)
- **【参数】
- **【返回值】
- ****************************************************************/
- void CPduSocketMonitor::SetLinkType(PDU_LINK_TYPE a_nLinkType)
- {
- m_nLinkType = a_nLinkType;
- }
- /*****************************************************************
- **【函数名称】 GetLinkType
- **【函数功能】 读取连接类型
- **【参数】
- **【返回值】
- ****************************************************************/
- PDU_LINK_TYPE CPduSocketMonitor::GetLinkType()
- {
- return m_nLinkType;
- }
- /*****************************************************************
- **【函数名称】 GetPeerLinkInfo
- **【函数功能】 读取SOCKET连接信息
- **【参数】
- **【返回值】 a_strIp SOCKET对端IP
- a_nPort SOCKET对端PORT
- ****************************************************************/
- void CPduSocketMonitor::GetPeerLinkInfo(CString& a_strIp, int& a_nPort)
- {
- a_strIp = m_strFarIp;
- a_nPort = m_nFarPort;
- }
- /*****************************************************************
- **【函数名称】 SetPeerLinkInfo
- **【函数功能】 设置SOCKET连接信息
- **【参数】 a_strIp SOCKET对端IP
- a_nPort SOCKET对端PORT
- **【返回值】
- ****************************************************************/
- void CPduSocketMonitor::SetPeerLinkInfo(const CString& a_strIp, int a_nPort)
- {
- m_strFarIp = a_strIp;
- m_nFarPort = a_nPort;
- }
- /*****************************************************************
- **【函数名称】 GetPeerDevInfo
- **【函数功能】 读取对端设备信息
- **【参数】
- **【返回值】 a_nDevType 对端设备类型
- a_nDevId 对端设备ID
- ****************************************************************/
- void CPduSocketMonitor::GetPeerDevInfo(PDU_DEV_TYPE& a_nDevType, int& a_nDevId)
- {
- a_nDevType = m_nPeerDevType;
- a_nDevId = m_nPeerDevId;
- }
- /*****************************************************************
- **【函数名称】 SetPeerDevInfo
- **【函数功能】 设置对端设备信息
- **【参数】 a_nDevType 对端设备类型
- a_nDevId 对端设备ID
- **【返回值】
- ****************************************************************/
- void CPduSocketMonitor::SetPeerDevInfo(PDU_DEV_TYPE a_nDevType, int a_nDevId)
- {
- m_nPeerDevType = a_nDevType;
- m_nPeerDevId = a_nDevId;
- }
- /*****************************************************************
- **【函数名称】 OnConnEstablisthed
- **【函数功能】 SOCKET连接建立事件处理
- **【参数】 a_pSocket 触发事件的SOCKET
- **【返回值】
- ****************************************************************/
- void CPduSocketMonitor::OnConnEstablisthed(CPduSocket* a_pSocket)
- {
- m_pParent = a_pSocket;
- // 设定SOCKET连接地址(用于监控管理)
- if(m_nLinkType == PDU_LINK_TYPE_SERVER) // 服务端
- {
- a_pSocket->GetPeerName(m_strFarIp, m_nFarPort);
- }
- else // 客户端
- {
- a_pSocket->Regist(); // 注册连接
- } // end if
- }
- /*****************************************************************
- **【函数名称】 OnConnFailed
- **【函数功能】 SOCKET连接断开/失败事件处理
- **【参数】 a_pSocket 触发事件的SOCKET
- **【返回值】
- ****************************************************************/
- void CPduSocketMonitor::OnConnFailed(CPduSocket* a_pSocket)
- {
- KillTimer(PDU_LISTEN_TIMER);
- if(m_nLinkType == PDU_LINK_TYPE_CLIENT && m_IsAotoReconnect) // 如果是客户端连接,则启动自动重连
- {
- m_pParent = a_pSocket;
- SetTimer(PDU_RECONN_TIMER, VAL_RECONNECT_INTERVAL, NULL); // 启动自动重连定时器
- }
- }
- /*****************************************************************
- **【函数名称】 OnConnRegistOK
- **【函数功能】 SOCKET连接注册成功事件处理
- **【参数】 a_pSocket 触发事件的SOCKET
- **【返回值】
- ****************************************************************/
- void CPduSocketMonitor::OnConnRegistOK(CPduSocket* a_pSocket)
- {
- // 对OCX以外的所有设备端启用心跳监听
- PDU_DEV_TYPE a_nDevType = PDU_DEV_TYPE_UNKNOWN;
- int a_nDevId = 0;
- m_pParent->GetLocalInfo(a_nDevType,a_nDevId);
- if(a_nDevType != PDU_DEV_TYPE_UNKNOWN && a_nDevType != PDU_DEV_TYPE_AGENT)
- {
- SetTimer(PDU_LISTEN_TIMER, VAL_LISTEN_INTERVAL, NULL);
- }
- }
- /*****************************************************************
- **【函数名称】 OnConnRegistFailed
- **【函数功能】 SOCKET连接注册失败事件处理
- **【参数】 a_pSocket 触发事件的SOCKET
- **【返回值】
- ****************************************************************/
- void CPduSocketMonitor::OnConnRegistFailed(CPduSocket* a_pSocket)
- {
- }
- /*****************************************************************
- **【函数名称】 OnTimer
- **【函数功能】 自定重连定时器
- **【参数】
- **【返回值】
- ****************************************************************/
- void CPduSocketMonitor::OnTimer(UINT_PTR nIDEvent)
- {
- switch(nIDEvent)
- {
- case PDU_RECONN_TIMER: // 自动重连
- {
- KillTimer(PDU_RECONN_TIMER);
- m_pParent->Connect(m_strFarIp, m_nFarPort);
- }
- break;
- case PDU_LISTEN_TIMER: // 心跳监听
- {
- m_pParent->Monitor();
- }
- break;
- } // end switch
- CWnd::OnTimer(nIDEvent);
- }
|