CMNetwork/inc/hgl/network/TCPAccept.h

84 lines
3.2 KiB
C
Raw Permalink Normal View History

2022-05-25 19:03:06 +08:00
#ifndef HGL_NETWORK_TCP_ACCEPT_INCLUDE
#define HGL_NETWORK_TCP_ACCEPT_INCLUDE
#include<hgl/network/TCPSocket.h>
2023-07-15 00:46:34 +08:00
#include<hgl/type/DataArray.h>
2022-05-25 19:03:06 +08:00
namespace hgl
{
namespace network
{
/**
* TCPAccept与SocketManage
*
* TCPAccept:
* SocketManage: TCPAccept进行管理的对象
* SocketManageThread: SocketManage的异步封装
*
* :
* 1.SocketManage通过OnSocketRecv函数通知TCPAccept接收数据
* 2.TCPAccept在收满4个字节的包长后MultiLevelMemoryPool申请缓冲区
* 3.TCPAccept收满一个包后OnRecvPacket事件函数通知开发者有包了
* 4.TCPAccept将缓冲区送回BufferPool
*/
using PACKET_SIZE_TYPE=uint32; ///<描述包长度的数据类型
constexpr uint PACKET_SIZE_TYPE_BYTES=sizeof(PACKET_SIZE_TYPE); ///<描述包长度的数据类型的字节长度
class SocketInputStream;
class SocketOutputStream;
/**
* TCP服务器接入用户处理基类Server管理器提供统一调用接口<br>
* *******************************************************************<br>
* 线
*/
class TCPAccept:public TCPSocket
{
protected:
SocketInputStream *sis=nullptr;
SocketOutputStream *sos=nullptr;
protected://事件函数由SocketManage调用
friend class SocketManage;
virtual int OnSocketRecv(int)=0; ///<Socket接收处理函数
virtual int OnSocketSend(int){return 0;} ///<Socket发送处理函数
virtual void OnSocketError(int)=0; ///<Socket错误处理函数
bool Send(void *,const uint); ///<发送原始数据
public:
using TCPSocket::TCPSocket;
virtual ~TCPAccept();
};//class TCPAccept:public TCPSocket
class TCPAcceptPacket:public TCPAccept
{
protected:
2023-07-15 00:46:34 +08:00
DataArray<uchar> recv_buffer;
2022-05-25 19:03:06 +08:00
uint recv_length=0;
uint64 recv_total=0;
protected:
virtual int OnSocketRecv(int) override; ///<Socket接收处理函数
public:
TCPAcceptPacket(); ///<本类构造函数
TCPAcceptPacket(int,IPAddress *); ///<本类构造函数
virtual ~TCPAcceptPacket()=default;
virtual bool SendPacket(void *,const PACKET_SIZE_TYPE &); ///<发包
virtual bool OnRecvPacket(void *,const PACKET_SIZE_TYPE &)=0; ///<接收包事件函数
};//class TCPAcceptPacket:public TCPAccept
}//namespace network
}//namespace hgl
#endif//HGL_NETWORK_TCP_ACCEPT_INCLUDE