Distribution_Service/Server/PortService/DataPacket.h
2025-12-03 18:08:23 +08:00

107 lines
2.9 KiB
C++

#ifndef OH_BS_DATA_PACKET_H
#define OH_BS_DATA_PACKET_H
#include "CCByteArray.h"
#include "CCSocket.h"
#include "CCWebSocket.h"
#include "CCDatagramSocket.h"
#include "ByteTool.h"
class DataPacket {
public:
CTL::Byte Mark1 = 0x00;
CTL::Byte Mark2 = 0x00;
CTL::Byte FunNumber = 0x00;
CTL::Byte Parameter1 = 0x00;
CTL::Byte Parameter2 = 0x00;
CTL::Byte Parameter3 = 0x00;
CTL::Byte Parameter4 = 0x00;
CTL::Byte Parameter5 = 0x00;
CTL::ByteArray AdditionalData{};
CTL::String AimIP = "";
CTL::ByteArray Buffer {};
int AimPort = 0;
bool IsTCP = false;
CTL::WebSocketInfo* AimWS = nullptr;
public:
DataPacket(const char* buffer, const ByteHander size, const CCHostInfo* info = nullptr){
Buffer.assign(buffer, size);
if(size >= 8){
Mark1 = buffer[0];
Mark2 = buffer[1];
FunNumber = buffer[2];
Parameter1 = buffer[3];
Parameter2 = buffer[4];
Parameter3 = buffer[5];
Parameter4 = buffer[6];
Parameter5 = buffer[7];
if (size > 8) {
AdditionalData.assign(&buffer[8], (ByteHander)(size - 8));
}
}
if(info){
AimIP = info->IPAddress;
AimPort = info->Port;
}
}
explicit DataPacket(CTL::ByteArray buffer,CTL::WebSocketInfo* info,const bool TCP = false){
const auto size = buffer.size();
if(size >= 8){
Mark1 = buffer[0];
Mark2 = buffer[1];
FunNumber = buffer[2];
Parameter1 = buffer[3];
Parameter2 = buffer[4];
Parameter3 = buffer[5];
Parameter4 = buffer[6];
Parameter5 = buffer[7];
if (size > 8) {
AdditionalData.assign(&buffer[8], (size - 8));
}
}
IsTCP = TCP;
AimWS = info;
}
~DataPacket(){
AdditionalData.clear();
}
private:
};
class MaintenancePacket {
public:
CTL::Byte FunNumber = 0x00;
CTL::Byte VersionNumber = 0x00;
CTL::Byte Length1 = 0x00;
CTL::Byte Length2 = 0x00;
CTL::Byte Length3 = 0x00;
CTL::Byte Length4 = 0x00;
CTL::ByteArray Data{};
CTL::String AimIP = "";
int AimPort = 0;
MaintenancePacket(const CTL::DatagramPacket& packet) {
const auto length = packet.getLength();
const auto buffer = packet.getData();
if (length >= 6) {
FunNumber = buffer[0];
VersionNumber = buffer[1];
Length1 = buffer[2];
Length2 = buffer[3];
Length3 = buffer[4];
Length4 = buffer[5];
const auto Size = APPTool::GetSize(Length4,Length3,Length2,Length1);
if (Size > 0) {
Data.assign(&buffer[6],Size);
}
}
AimIP = packet.getAddress().getHostAddress();
AimPort = packet.getPort();
}
~MaintenancePacket() {
Data.clear();
}
};
#endif