IPBS_Station/SDK/CCServlet/include/CCWebSocketInfo.h

81 lines
2.0 KiB
C
Raw Permalink Normal View History

2025-09-05 08:44:30 +08:00
#ifndef CCWEBSOCKETINFO_H
#define CCWEBSOCKETINFO_H
#include "vector"
#include "CCString.h"
#include "CCSocket.h"
#include <cstdint>
#include "CCTimeData.h"
#include "CCByteArray.h"
// WebSocket 数据帧结构体
struct WebSocketFrame {
uint8_t fin : 1; // FIN 标志位
uint8_t rsv1 : 1; // RSV1 标志位
uint8_t rsv2 : 1; // RSV2 标志位
uint8_t rsv3 : 1; // RSV3 标志位
uint8_t opcode : 4; // Opcode
uint8_t mask : 1; // Mask 标志位
uint8_t payload_len : 7; // Payload 长度
uint8_t MaskingKey[4] = {0};
// 构造函数
WebSocketFrame(uint8_t opcode, uint8_t mask, uint64_t payload_len)
: fin(1), rsv1(0), rsv2(0), rsv3(0), opcode(opcode), mask(mask), payload_len((uint8_t)(payload_len & 0x7f)) {}
WebSocketFrame() {
fin = 1;
rsv1 = 0;
rsv2 = 0;
rsv3 = 0;
opcode = 0;
mask = 0;
payload_len = 7 & 0x7f;
}
};
enum WS_ErrorCode{
WS_NO_ERROR = 0,
WS_PROTOCOL_ERROR = 1,
WS_DATA_ERROR = 2
};
class CCWebSocketInfo
{
public:
enum WS_Status
{
WS_STATUS_CONNECT = 0,
WS_STATUS_UNCONNECT = 1,
};
enum WS_FrameType
{
WS_EMPTY_FRAME = 0xF0,
WS_ERROR_FRAME = 0xF1,
WS_TEXT_FRAME = 0x01,
WS_BINARY_FRAME = 0x02,
WS_PING_FRAME = 0x09,
WS_PONG_FRAME = 0x0A,
WS_OPENING_FRAME = 0xF3,
WS_CLOSING_FRAME = 0x08
};
WebSocketFrame Frame;
std::vector<char> Buffer;
WS_ErrorCode ErrorCode = WS_NO_ERROR;
private:
CCString id = "";
CCSocket Client;
public:
void SetId(CCString str);
CCString GetId();
void SetSocket(CCSocket& socket);
CCSocket& GetSocket();
bool SendMassage(CCByteArray message,WS_FrameType type = WS_TEXT_FRAME);
static bool SendMassage(CCSocket& Client,CCByteArray message,WS_FrameType type = WS_TEXT_FRAME);
private:
static int wsEncodeFrame(CCByteArray inMessage, CCByteArray &outFrame, enum WS_FrameType frameType);
};
#endif