FastArena/Assets/Network/Packets/ConnectionPackets.cs

75 lines
2.4 KiB
C#

using System;
using System.Runtime.InteropServices;
namespace FastArena.Network.Packets
{
[StructLayout(LayoutKind.Sequential)]
internal readonly struct ConnectionRequestTCP
{
internal readonly PacketHeader header;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
internal readonly byte[] clientKey;
public ConnectionRequestTCP(byte[] clientKey)
{
header = new PacketHeader(PacketType.ConnectionRequestTCP);
this.clientKey = clientKey;
}
}
[StructLayout(LayoutKind.Sequential)]
internal readonly struct ConnectionResponseTCP
{
internal readonly PacketHeader header;
internal readonly StatusCode statusCode;
internal readonly Guid sessionId;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
internal readonly byte[] serverKey;
public ConnectionResponseTCP(StatusCode statusCode, Guid sessionId, byte[] serverKey)
{
header = new PacketHeader(PacketType.ConnectionResponseTCP);
this.statusCode = statusCode;
this.sessionId = sessionId;
this.serverKey = serverKey;
}
public void ValidateResponseCode()
{
if (statusCode != StatusCode.OK)
throw new StatusCodeException(statusCode);
}
}
[StructLayout(LayoutKind.Sequential)]
internal readonly struct ConnectionRequestUDP
{
internal readonly PacketHeader header;
internal readonly Guid sessionId;
public ConnectionRequestUDP(Guid sessionId)
{
header = new PacketHeader(PacketType.ConnectionRequestUDP);
this.sessionId = sessionId;
}
}
[StructLayout(LayoutKind.Sequential)]
internal readonly struct ConnectionResponseUDP
{
internal readonly PacketHeader header;
internal readonly StatusCode statusCode;
public ConnectionResponseUDP(StatusCode statusCode)
{
header = new PacketHeader(PacketType.ConnectionResponseUDP);
this.statusCode = statusCode;
}
public void ValidateResponseCode()
{
if (statusCode != StatusCode.OK)
throw new StatusCodeException(statusCode);
}
}
}