/// <summary>Parses a packet from a sequence of bytes.</summary> public static ref TPacket ParsePacket <TPacket>(Span <byte> data) where TPacket : struct, IPacket { var packet = PacketIdentifier.Get <TPacket>(); packet.EnsureMatchingHeader(data, Marshal.SizeOf <TPacket>()); return(ref MemoryMarshal.Cast <byte, TPacket>(data.Slice(packet.PayloadOffset))[0]);
/// <summary>Registers a new handler for a packet type.</summary> protected void RegisterHandler <TPacket>(IPacketHandler <T> handler) where TPacket : IPacket { this.InsertHandlerForPacket(PacketIdentifier.Get <TPacket>(), handler); }