From ac9cb7291439ae41c1d920be7298321eb5269983 Mon Sep 17 00:00:00 2001 From: Syntriax Date: Sun, 6 Jul 2025 16:23:37 +0300 Subject: [PATCH] refactor: added packet delivery type for networking --- Shared/Network/Abstract/INetworkCommunicator.cs | 6 +++--- Shared/Network/Abstract/PacketDelivery.cs | 9 +++++++++ Shared/Network/LiteNetLib/LiteNetLibClient.cs | 13 +++++++++++-- Shared/Network/LiteNetLib/LiteNetLibServer.cs | 13 ++++++++++--- 4 files changed, 33 insertions(+), 8 deletions(-) create mode 100644 Shared/Network/Abstract/PacketDelivery.cs diff --git a/Shared/Network/Abstract/INetworkCommunicator.cs b/Shared/Network/Abstract/INetworkCommunicator.cs index d2f4280..20ed5f2 100644 --- a/Shared/Network/Abstract/INetworkCommunicator.cs +++ b/Shared/Network/Abstract/INetworkCommunicator.cs @@ -21,7 +21,7 @@ public interface INetworkCommunicatorClient : INetworkCommunicator { INetworkCommunicatorClient Connect(string address, int port, string? password = null); - INetworkCommunicatorClient SendToServer(T packet) where T : class, new(); + INetworkCommunicatorClient SendToServer(T packet, PacketDelivery packetDelivery = PacketDelivery.ReliableInOrder) where T : class, new(); } public interface INetworkCommunicatorServer : INetworkCommunicator @@ -32,6 +32,6 @@ public interface INetworkCommunicatorServer : INetworkCommunicator INetworkCommunicatorServer Start(int port, int maxConnectionCount, string? password = null); - INetworkCommunicatorServer SendToClient(IConnection connection, T packet) where T : class, new(); - INetworkCommunicatorServer SendToAll(T packet) where T : class, new(); + INetworkCommunicatorServer SendToClient(IConnection connection, T packet, PacketDelivery packetDelivery = PacketDelivery.ReliableInOrder) where T : class, new(); + INetworkCommunicatorServer SendToAll(T packet, PacketDelivery packetDelivery = PacketDelivery.ReliableInOrder) where T : class, new(); } diff --git a/Shared/Network/Abstract/PacketDelivery.cs b/Shared/Network/Abstract/PacketDelivery.cs new file mode 100644 index 0000000..36f307d --- /dev/null +++ b/Shared/Network/Abstract/PacketDelivery.cs @@ -0,0 +1,9 @@ +namespace Syntriax.Engine.Network; + +public enum PacketDelivery +{ + ReliableInOrder, + ReliableOutOfOrder, + UnreliableInOrder, + UnreliableOutOfOrder, +}; diff --git a/Shared/Network/LiteNetLib/LiteNetLibClient.cs b/Shared/Network/LiteNetLib/LiteNetLibClient.cs index 5b1a00a..5432ab8 100644 --- a/Shared/Network/LiteNetLib/LiteNetLibClient.cs +++ b/Shared/Network/LiteNetLib/LiteNetLibClient.cs @@ -1,6 +1,7 @@ using System.Threading; using System.Threading.Tasks; +using LiteNetLib; using LiteNetLib.Utils; using Syntriax.Engine.Core; @@ -28,11 +29,19 @@ public class LiteNetLibClient : LiteNetLibCommunicatorBase, INetworkCommunicator return this; } - public INetworkCommunicatorClient SendToServer(T packet) where T : class, new() + public INetworkCommunicatorClient SendToServer(T packet, PacketDelivery packetDelivery) where T : class, new() { netDataWriter.Reset(); netPacketProcessor.Write(netDataWriter, packet); - Manager.FirstPeer.Send(netDataWriter, LiteNetLib.DeliveryMethod.ReliableOrdered); + + switch (packetDelivery) + { + case PacketDelivery.ReliableInOrder: Manager.FirstPeer.Send(netDataWriter, DeliveryMethod.ReliableOrdered); break; + case PacketDelivery.UnreliableInOrder: Manager.FirstPeer.Send(netDataWriter, DeliveryMethod.Sequenced); break; + case PacketDelivery.ReliableOutOfOrder: Manager.FirstPeer.Send(netDataWriter, DeliveryMethod.ReliableUnordered); break; + case PacketDelivery.UnreliableOutOfOrder: Manager.FirstPeer.Send(netDataWriter, DeliveryMethod.Unreliable); break; + default: Manager.FirstPeer.Send(netDataWriter, DeliveryMethod.ReliableOrdered); break; + } return this; } diff --git a/Shared/Network/LiteNetLib/LiteNetLibServer.cs b/Shared/Network/LiteNetLib/LiteNetLibServer.cs index 551ae8d..db80cc3 100644 --- a/Shared/Network/LiteNetLib/LiteNetLibServer.cs +++ b/Shared/Network/LiteNetLib/LiteNetLibServer.cs @@ -50,7 +50,7 @@ public class LiteNetLibServer : LiteNetLibCommunicatorBase, INetworkCommunicator return this; } - public INetworkCommunicatorServer SendToClient(IConnection connection, T packet) where T : class, new() + public INetworkCommunicatorServer SendToClient(IConnection connection, T packet, PacketDelivery packetDelivery) where T : class, new() { netDataWriter.Reset(); netPacketProcessor.Write(netDataWriter, packet); @@ -58,12 +58,19 @@ public class LiteNetLibServer : LiteNetLibCommunicatorBase, INetworkCommunicator if (Manager.ConnectedPeerList.FirstOrDefault(p => p.Id.CompareTo(connection.Id) == 0) is not NetPeer netPeer) throw new($"Peer {connection} couldn't be found."); - netPeer.Send(netDataWriter, DeliveryMethod.ReliableOrdered); + switch (packetDelivery) + { + case PacketDelivery.ReliableInOrder: netPeer.Send(netDataWriter, DeliveryMethod.ReliableOrdered); break; + case PacketDelivery.UnreliableInOrder: netPeer.Send(netDataWriter, DeliveryMethod.Sequenced); break; + case PacketDelivery.ReliableOutOfOrder: netPeer.Send(netDataWriter, DeliveryMethod.ReliableUnordered); break; + case PacketDelivery.UnreliableOutOfOrder: netPeer.Send(netDataWriter, DeliveryMethod.Unreliable); break; + default: netPeer.Send(netDataWriter, DeliveryMethod.ReliableOrdered); break; + } return this; } - public INetworkCommunicatorServer SendToAll(T packet) where T : class, new() + public INetworkCommunicatorServer SendToAll(T packet, PacketDelivery packetDelivery) where T : class, new() { netDataWriter.Reset(); netPacketProcessor.Write(netDataWriter, packet);