#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