initial commit
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
using System;
|
||||
|
||||
namespace Crysome.Common.Network;
|
||||
|
||||
public static class UdpTransport
|
||||
{
|
||||
public const int HeaderSize = 13;
|
||||
|
||||
public const int MaxFragmentSize = 60000;
|
||||
|
||||
public static byte[] BuildFragment(uint sessionToken, byte packetTypeId, uint frameSeq, ushort fragIdx, ushort fragCount, byte[] payloadData, int payloadOffset, int payloadLength)
|
||||
{
|
||||
byte[] array = new byte[13 + payloadLength];
|
||||
int num = 0;
|
||||
Buffer.BlockCopy(BitConverter.GetBytes(sessionToken), 0, array, num, 4);
|
||||
num += 4;
|
||||
array[num++] = packetTypeId;
|
||||
Buffer.BlockCopy(BitConverter.GetBytes(frameSeq), 0, array, num, 4);
|
||||
num += 4;
|
||||
Buffer.BlockCopy(BitConverter.GetBytes(fragIdx), 0, array, num, 2);
|
||||
num += 2;
|
||||
Buffer.BlockCopy(BitConverter.GetBytes(fragCount), 0, array, num, 2);
|
||||
num += 2;
|
||||
Buffer.BlockCopy(payloadData, payloadOffset, array, num, payloadLength);
|
||||
return array;
|
||||
}
|
||||
|
||||
public static bool ParseHeader(byte[] datagram, int length, out uint sessionToken, out byte packetTypeId, out uint frameSeq, out ushort fragIdx, out ushort fragCount, out int payloadOffset, out int payloadLength)
|
||||
{
|
||||
sessionToken = 0u;
|
||||
packetTypeId = 0;
|
||||
frameSeq = 0u;
|
||||
fragIdx = 0;
|
||||
fragCount = 0;
|
||||
payloadOffset = 0;
|
||||
payloadLength = 0;
|
||||
if (length < 13)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
int num = 0;
|
||||
sessionToken = BitConverter.ToUInt32(datagram, num);
|
||||
num += 4;
|
||||
packetTypeId = datagram[num++];
|
||||
frameSeq = BitConverter.ToUInt32(datagram, num);
|
||||
num += 4;
|
||||
fragIdx = BitConverter.ToUInt16(datagram, num);
|
||||
num += 2;
|
||||
fragCount = BitConverter.ToUInt16(datagram, num);
|
||||
payloadLength = length - (payloadOffset = num + 2);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user