CMNetwork/inc/hgl/network/WebSocketAccept.h

83 lines
2.5 KiB
C
Raw Permalink Normal View History

2022-05-25 19:03:06 +08:00
#ifndef HGL_NETWORK_WEBSOCKET_ACCEPT_INCLUDE
#define HGL_NETWORK_WEBSOCKET_ACCEPT_INCLUDE
#include<hgl/network/TCPAccept.h>
2023-07-15 00:46:34 +08:00
#include<hgl/type/String.h>
2022-05-25 19:03:06 +08:00
namespace hgl
{
namespace network
{
/**
* WebSocket接入管理
*/
class WebSocketAccept:public TCPAccept
{
#ifdef _DEBUG
2024-07-25 02:57:29 +08:00
DataArray<u8char> data_out_str;
2022-05-25 19:03:06 +08:00
#endif//_DEBUG
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接收处理函数
void WebSocketHandshake();
int SendFrame(uint8,void *,uint32,bool);
protected:
uint msg_opcode;
bool msg_fin;
bool msg_masked;
uint msg_header_size;
uint64 msg_length;
uint64 msg_full_length;
uint last_opcode;
protected: //WebSocket支持
/**
* WebSocket
* @param accept_protocol WebSocket协议
* @param protocol WebSocket协议
* @param version WebSocket版本
* @return
*/
virtual bool OnHandshake(U8String &accept_protocol,const U8String &protocol,uint version)
2022-05-25 19:03:06 +08:00
{
accept_protocol=protocol; //原样接收,如有需求请自行重载此函数处理
return(true);
}
public:
WebSocketAccept(); ///<本类构造函数
WebSocketAccept(int,IPAddress *); ///<本类构造函数
virtual ~WebSocketAccept()=default;
virtual void OnPing(){}
virtual void OnPong(){}
virtual bool OnBinary(void *,uint32,bool)=0;
virtual bool OnText(char *,uint32,bool)=0;
virtual void OnError(){}
bool SendPing();
bool SendPong();
bool SendBinary(void *,uint32,bool=true);
bool SendText(void *,uint32,bool=true);
bool SendText(const U8String &str)
2022-05-25 19:03:06 +08:00
{
return SendText(str.c_str(),str.Length());
}
};//class WebSocketAccept:public TCPAccept
}//namespace network
}//namespace hgl
#endif//HGL_NETWORK_WEBSOCKET_ACCEPT_INCLUDE