CMNetwork/inc/hgl/network/SocketManage.h

72 lines
2.2 KiB
C
Raw Normal View History

2022-05-25 19:03:06 +08:00
#ifndef HGL_NETWORK_SOCKET_MANAGE_INCLUDE
#define HGL_NETWORK_SOCKET_MANAGE_INCLUDE
#include<hgl/type/Map.h>
#include<hgl/type/SortedSet.h>
2022-05-25 19:03:06 +08:00
#include<hgl/network/SocketEvent.h>
#include<hgl/network/TCPAccept.h>
namespace hgl
{
namespace network
{
class SocketManageBase;
using TCPAcceptSet=SortedSet<TCPAccept *>;
2022-05-25 19:03:06 +08:00
/**
* Socket管理类Update内处理socket的轮循和处理事件(recv还是send)<br>
* 线线使
*/
class SocketManage
{
protected:
using SocketList=Map<int,TCPAccept *>;
protected:
SocketList socket_list;
SocketManageBase *manage; ///<实际的Socket管理器
SocketEventList sock_recv_list,
sock_send_list,
sock_error_list;
TCPAcceptSet error_sets;
2022-05-25 19:03:06 +08:00
protected:
void ProcSocketRecvList();
void ProcSocketSendList();
void ProcSocketErrorList();
void ProcErrorList();
public:
const TCPAcceptSet &GetErrorSocketSet(){return error_sets;} ///<获取错误SOCKET合集
2022-05-25 19:03:06 +08:00
public:
SocketManage(int max_user);
virtual ~SocketManage();
bool Join(TCPAccept *s);
int Join(TCPAccept **s_list,int count);
bool Unjoin(TCPAccept *s);
int Unjoin(TCPAccept **s_list,int count);
/**
* (Socket,Socket<br>
* Update中轮循到的错误/Socket列表Update时清除Update后GetErrorSocketSet获取错误Socket合集并处理出错Socket
*/
virtual int Update(const double &time_out=HGL_NETWORK_TIME_OUT);
virtual void Clear();
};//class SocketManage
}//namespace network
}//namespace hgl
#endif//HGL_NETWORK_SOCKET_MANAGE_INCLUDE