using System; using System.Runtime.CompilerServices; using Lidgren.Network; namespace Barotrauma.Networking { internal static class WriteOnlyMessageExtensions { #if CLIENT public static IWriteMessage WithHeader(this IWriteMessage msg, ClientPacketHeader header) { msg.WriteByte((byte)header); return msg; } #elif SERVER public static IWriteMessage WithHeader(this IWriteMessage msg, ServerPacketHeader header) { msg.WriteByte((byte)header); return msg; } #endif public static void WriteNetSerializableStruct(this IWriteMessage msg, T serializableStruct) where T : INetSerializableStruct { serializableStruct.Write(msg); } public static NetOutgoingMessage ToLidgren(this IWriteMessage msg, NetPeer peer) { NetOutgoingMessage outMsg = peer.CreateMessage(); outMsg.Write(msg.Buffer, 0, msg.LengthBytes); return outMsg; } } internal static class NetIncomingMessageExtensions { public static T ReadHeader(this NetIncomingMessage msg) where T : Enum { byte header = msg.ReadByte(); return Unsafe.As(ref header); } public static IReadMessage ToReadMessage(this NetIncomingMessage msg) { return new ReadWriteMessage(msg.Data, 0, msg.LengthBits, copyBuf: false); } } internal static class DeliveryMethodExtensions { public static NetDeliveryMethod ToLidgren(this DeliveryMethod deliveryMethod) => deliveryMethod switch { DeliveryMethod.Unreliable => NetDeliveryMethod.Unreliable, DeliveryMethod.Reliable => NetDeliveryMethod.ReliableOrdered, _ => NetDeliveryMethod.Unreliable }; public static Steamworks.P2PSend ToSteam(this DeliveryMethod deliveryMethod) => deliveryMethod switch { DeliveryMethod.Reliable => Steamworks.P2PSend.Reliable, _ => Steamworks.P2PSend.Unreliable }; } }