/************************************************************************* 【文件名】 PduSocketVector.h 【功能模块和目的】 SOCKET通讯实体容器类头文件 【开发者及日期】 郑石诺 2015/03/19 【版本】 V1.0.0 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司 【更改记录】 *************************************************************************/ #pragma once #include "PduLinkInc.h" class CPduSocket; class CPduEntity; /************************************************************************* 【类名】 CPduSocketVector 【功能】 【接口说明】 SOCKET通讯实体容器类 【开发者及日期】 郑石诺 2015/03/19 【版本】 V1.0.0 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司 【更改记录】 *************************************************************************/ class CPduSocketVector { private: typedef CList ListSocket; ListSocket m_listConnecting; // 正在连接的SOCKET ListSocket m_listConnected; // 已连接的SOCKET ListSocket m_listRegisted; // 可通讯的SOCKET CPduSocket* m_pSocketDeleting; // 要删除的SOCKET private: void __OnConnFailedProc(CPduSocket* a_pSocket); // SOCKET连接断开/失败的后续处理 BOOL __DeleteSocket(CPduSocket* a_pSocket, ListSocket& a_list); // 删除指定的SOCKET BOOL __RemoveSocket(CPduSocket* a_pSocket, ListSocket& a_list); // 从链表中移除指定的SOCKET CPduSocket* __LookupSocket(PDU_DEV_TYPE a_nFarType, int a_nFarId, ListSocket& a_list); // 从LIST中查找指定的连接 CPduSocket* __LookupSocket(SOCKET a_hSocket, ListSocket& a_list); // 从LIST中查找指定的连接 BOOL __Lookup4Delete(PDU_DEV_TYPE a_nFarType, int a_nFarId, ListSocket& a_list); public: CPduSocketVector(void); ~CPduSocketVector(void); // 业务操作 void InsertSocket(CPduSocket* a_pSocket); // 添加一个新的连接 BOOL RemoveSocket(PDU_DEV_TYPE a_nFarType, int a_nFarId); // 删除一个连接 CPduSocket* GetPduSocket(PDU_DEV_TYPE a_nFarType, int a_nFarId); // 查找连接 CPduSocket* GetPduSocket(SOCKET a_hSocket); // 查找连接 void Send2All(CPduEntity* a_pPdu); void Release(void); // 事件响应 PDU_LINK_STATE OnConnEstablished(CPduSocket* a_pSocket); // 连接建立 PDU_LINK_STATE OnConnFailed(CPduSocket* a_pSocket); // 连接失败或断开 PDU_LINK_STATE OnConnRegistOK(CPduSocket* a_pSocket); // 注册成功 PDU_LINK_STATE OnConnRegistFailed(CPduSocket* a_pSocket); // 注册失败 };