From a05090937565b1ee055ee9765675c3637fca446f Mon Sep 17 00:00:00 2001 From: Syntriax Date: Thu, 13 Nov 2025 20:24:23 +0300 Subject: [PATCH] fix: server when sending to individual client messes packet order --- .../LiteNetLibServer.cs | 54 ++++++++----------- 1 file changed, 21 insertions(+), 33 deletions(-) diff --git a/Engine.Integration/Engine.Integration.LiteNetLib/LiteNetLibServer.cs b/Engine.Integration/Engine.Integration.LiteNetLib/LiteNetLibServer.cs index 66d3c4c..9bcee1a 100644 --- a/Engine.Integration/Engine.Integration.LiteNetLib/LiteNetLibServer.cs +++ b/Engine.Integration/Engine.Integration.LiteNetLib/LiteNetLibServer.cs @@ -53,25 +53,10 @@ public class LiteNetLibServer : LiteNetLibCommunicatorBase, INetworkCommunicator public INetworkCommunicatorServer SendToClient(IConnection connection, T packet, PacketDelivery packetDelivery) where T : class, new() { - netDataWriter.Reset(); - if (Manager.ConnectedPeerList.FirstOrDefault(p => p.Id.ToString().CompareTo(connection.Id) == 0) is not NetPeer netPeer) throw new($"Peer {connection} couldn't be found."); - if (packet is INetworkPacketEncrypted) // TODO performance improvements - { - netDataWriterEncrypted.Reset(); - netPacketProcessor.Write(netDataWriterEncrypted, packet); - byte[] encryptedData = cryptor.Encrypt(netDataWriterEncrypted.CopyData()); - - netDataWriter.Put(true); - netDataWriter.PutBytesWithLength(encryptedData); - } - else - { - netDataWriter.Put(false); - netPacketProcessor.Write(netDataWriter, packet); - } + WritePacket(packet); switch (packetDelivery) { @@ -87,23 +72,7 @@ public class LiteNetLibServer : LiteNetLibCommunicatorBase, INetworkCommunicator public INetworkCommunicatorServer SendToAll(T packet, PacketDelivery packetDelivery) where T : class, new() { - netDataWriter.Reset(); - netPacketProcessor.Write(netDataWriter, packet); - - if (packet is INetworkPacketEncrypted) - { - netDataWriterEncrypted.Reset(); - - netPacketProcessor.Write(netDataWriterEncrypted, packet); - byte[] encryptedData = cryptor.Encrypt(netDataWriterEncrypted.CopyData()); - netDataWriter.PutBytesWithLength(encryptedData); - netDataWriter.Put(true); - } - else - { - netPacketProcessor.Write(netDataWriter, packet); - netDataWriter.Put(false); - } + WritePacket(packet); switch (packetDelivery) { @@ -116,6 +85,25 @@ public class LiteNetLibServer : LiteNetLibCommunicatorBase, INetworkCommunicator return this; } + private void WritePacket(T packet) where T : class, new() + { + netDataWriter.Reset(); + netDataWriterEncrypted.Reset(); + + if (packet is INetworkPacketEncrypted) + { + netPacketProcessor.Write(netDataWriterEncrypted, packet); + byte[] encryptedData = cryptor.Encrypt(netDataWriterEncrypted.CopyData()); + netDataWriter.Put(true); + netDataWriter.PutBytesWithLength(encryptedData); + } + else + { + netDataWriter.Put(false); + netPacketProcessor.Write(netDataWriter, packet); + } + } + private void PollEvents(IUniverse sender, IUniverse.UpdateArguments args) => Manager.PollEvents(); public override void EnterUniverse(IUniverse universe)