| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- /*************************************************************************
- 【文件名】 ClientContainer.h
- 【功能模块和目的】 客户端容器类头文件
- 【开发者及日期】 郑石诺 2015/07/19
- 【版本】 V1.0.0
- 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
- 【更改记录】
- *************************************************************************/
- #pragma once
- #include <afxmt.h>
- class CNetClient;
- class CPduEntity;
- /*************************************************************************
- 【类名】 CClientContainer
- 【功能】
- 【接口说明】 客户端容器类
- 【开发者及日期】 郑石诺 2015/07/19
- 【版本】 V1.0.0
- 【版权信息】 Copyright (C)2015 河南华谊网络科技有限公司
- 【更改记录】
- *************************************************************************/
- class CClientContainer
- {
- private:
- typedef CList<CNetClient*, CNetClient*> ListClient;
- public:
- CClientContainer(void);
- ~CClientContainer(void);
- // 业务操作
- void insertClient(CNetClient* a_pClient); // 添加一个新的连接
- bool removeClient(PDU_DEV_TYPE a_nFarType, int a_nFarId); // 删除一个连接
- bool removeClient(SOCKET a_hSocket);
- CNetClient* getClient(PDU_DEV_TYPE a_nFarType, int a_nFarId); // 查找连接
- CNetClient* getClient(SOCKET a_hSocket);
- CNetClient* getClient(CNetClient* a_pClient);
- void send2All(CPduEntity* a_pPdu);
- void release(void);
- void clearClientDeleted(void);
- // 事件响应
- PDU_LINK_STATE onConnEstablished(CNetClient* a_pClient); // 连接建立
- PDU_LINK_STATE onConnFailed(CNetClient* a_pClient); // 连接失败或断开
- PDU_LINK_STATE onConnRegistOK(CNetClient* a_pClient); // 注册成功
- PDU_LINK_STATE onConnRegistFailed(CNetClient* a_pClient); // 注册失败
- private:
- void __add2List(CNetClient* a_pClient, ListClient& a_list, CCriticalSection* a_pCs);
- void __onConnFailedProc(CNetClient* a_pClient); // SOCKET连接断开/失败的后续处理
- void __deleteClient(CNetClient* a_pClient); // 删除指定的客户端
- bool __removeClient(CNetClient* a_pClient, ListClient& a_list, CCriticalSection* a_pCs); // 从链表中移除指定的客户端
- CNetClient* __lookup(PDU_DEV_TYPE a_nFarType, int a_nFarId, ListClient& a_list, CCriticalSection* a_pCs); // 从LIST中查找指定的连接
- CNetClient* __lookup(SOCKET a_hSocket, ListClient& a_list, CCriticalSection* a_pCs);
- CNetClient* __lookup(CNetClient* a_pClient, ListClient& a_list, CCriticalSection* a_pCs);
- bool __lookup4Delete(PDU_DEV_TYPE a_nFarType, int a_nFarId, ListClient& a_list, CCriticalSection* a_pCs);
- bool __lookup4Delete(SOCKET a_hSocket, ListClient& a_list, CCriticalSection* a_pCs);
- private:
- ListClient m_listConnecting; // 正在连接的客户端
- ListClient m_listConnected; // 已连接的客户端
- ListClient m_listRegisted; // 可通讯的客户端
- ListClient m_ListDeleted; // 要删除的客户端
- CCriticalSection m_CS4Connecting;
- CCriticalSection m_CS4Connected;
- CCriticalSection m_CS4Registed;
- CCriticalSection m_Cs4Deleted;
- };
|