91 lines
2.1 KiB
C#
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);
|
|
}
|
|
|
|
}
|
|
}
|
|
} |