Files
2025-08-19 12:45:50 +02:00

91 lines
2.1 KiB
C#

using System;
using System.IO;
namespace Inspectron.HawkEye.UDPB
{
public class UDPBPacket
{
public enum EPacketType:uint
{
Data=0,
CloseSequence=1,
BeginSequence=2,
Nak=3,
Ok=4
}
public UDPBPacket()
{
}
private const int sequenceIndex = 0;
private const int messageIndex = 1;
private const int typeIndex = 2;
private const int datalengthIndex = 3;
public const int packetHeaderSize = 16;
private uint[] _header=new uint[4];
public uint SequenceId
{
get => _header[sequenceIndex];
set => _header[sequenceIndex] = value;
}
public uint MessageId
{
get => _header[messageIndex];
set => _header[messageIndex] = value;
}
public EPacketType Type
{
get => (EPacketType)_header[typeIndex];
set => _header[typeIndex] = (uint)value;
}
private byte[] _payload;
public byte[] Payload
{
get => _payload??new byte[0];
set
{
_payload = value;
}
}
public uint Length
{
get => _header[datalengthIndex];
set => _header[datalengthIndex] = value;
}
public byte[] Serialize()
{
byte[] bytes = new byte[UDPBQueue.PACKET_SIZE+packetHeaderSize];
Buffer.BlockCopy(_header, 0, bytes, 0, packetHeaderSize);
if(_payload!=null)
Array.Copy(_payload, 0, bytes, packetHeaderSize, _payload.Length);
return bytes;
}
public void Deserialize(byte[] data,int offset,int len)
{
Buffer.BlockCopy(data, offset, _header, 0, packetHeaderSize);
var dataLen = _header[datalengthIndex];
if (dataLen > 0)
{
_payload = new byte[dataLen];
Array.Copy(data, packetHeaderSize+ offset, _payload, 0, (int) dataLen);
}
}
}
}