From 93d705e402b26ed3d2ef705e8a21f0b28972c70f Mon Sep 17 00:00:00 2001 From: Sardelka Date: Fri, 29 Jul 2022 21:15:23 +0800 Subject: [PATCH] Latency fix --- RageCoop.Client/Menus/Sub/DebugMenu.cs | 15 --------------- RageCoop.Client/Networking/Networking.cs | 11 +++++++++-- RageCoop.Client/Networking/Receive.cs | 4 +--- RageCoop.Client/PlayerList.cs | 6 ++---- RageCoop.Client/RageCoop.Client.csproj | 3 +-- RageCoop.Client/Sync/SyncParameters.cs | 7 ------- RageCoop.Client/Util/Util.cs | 4 ++-- RageCoop.Core/Packets/Misc.cs | 6 +++--- RageCoop.Core/Packets/Packets.cs | 8 ++------ RageCoop.Server/Server.cs | 2 +- 10 files changed, 21 insertions(+), 45 deletions(-) delete mode 100644 RageCoop.Client/Sync/SyncParameters.cs diff --git a/RageCoop.Client/Menus/Sub/DebugMenu.cs b/RageCoop.Client/Menus/Sub/DebugMenu.cs index 0a00ea4..32e04ea 100644 --- a/RageCoop.Client/Menus/Sub/DebugMenu.cs +++ b/RageCoop.Client/Menus/Sub/DebugMenu.cs @@ -16,23 +16,13 @@ namespace RageCoop.Client UseMouse = false, Alignment = Main.Settings.FlipMenu ? GTA.UI.Alignment.Right : GTA.UI.Alignment.Left }; - private static NativeItem d1 = new NativeItem("PositionPrediction"); static DebugMenu() { Menu.Banner.Color = Color.FromArgb(225, 0, 0, 0); Menu.Title.Color = Color.FromArgb(255, 165, 0); - d1.Activated+=(sender, e) => - { - try { SyncParameters.PositioinPredictionDefault =float.Parse(Game.GetUserInput(WindowTitle.EnterMessage20, SyncParameters.PositioinPredictionDefault.ToString(), 20)); } - catch { } - Update(); - }; - - Menu.Add(d1); Menu.AddSubMenu(DiagnosticMenu); - Menu.Opening+=(sender, e) => Update(); DiagnosticMenu.Opening+=(sender, e) => { DiagnosticMenu.Clear(); @@ -43,14 +33,9 @@ namespace RageCoop.Client } }; - Update(); } - private static void Update() - { - d1.AltTitle = SyncParameters.PositioinPredictionDefault.ToString(); - } } } diff --git a/RageCoop.Client/Networking/Networking.cs b/RageCoop.Client/Networking/Networking.cs index c60c2bd..a9a11a0 100644 --- a/RageCoop.Client/Networking/Networking.cs +++ b/RageCoop.Client/Networking/Networking.cs @@ -1,7 +1,7 @@ using Lidgren.Network; using RageCoop.Core; using System; -using System.Diagnostics; +using System.Collections.Generic; using System.Security.Cryptography; using System.Threading; using System.Threading.Tasks; @@ -13,10 +13,17 @@ namespace RageCoop.Client public static NetClient Client; public static float Latency = 0; public static bool ShowNetworkInfo = false; - public static Security Security; + public static Security Security; + private static readonly Dictionary> PendingResponses = new Dictionary>(); + internal static readonly Dictionary> RequestHandlers = new Dictionary>(); + static Networking() { Security=new Security(Main.Logger); + RequestHandlers.Add(PacketType.PingPong, (b) => + { + return new Packets.PingPong(); + }); Task.Run(() => { while (true) diff --git a/RageCoop.Client/Networking/Receive.cs b/RageCoop.Client/Networking/Receive.cs index a3720ae..291a6c0 100644 --- a/RageCoop.Client/Networking/Receive.cs +++ b/RageCoop.Client/Networking/Receive.cs @@ -28,8 +28,6 @@ namespace RageCoop.Client } }; private static readonly AutoResetEvent _publicKeyReceived = new AutoResetEvent(false); - private static readonly Dictionary> PendingResponses = new Dictionary>(); - internal static readonly Dictionary> RequestHandlers = new Dictionary>(); public static void ProcessMessage(NetIncomingMessage message) { if (message == null) { return; } @@ -111,7 +109,6 @@ namespace RageCoop.Client int id = message.ReadInt32(); var realType = (PacketType)message.ReadByte(); int len = message.ReadInt32(); - Main.Logger.Debug($"{id},{realType},{len}"); if (RequestHandlers.TryGetValue(realType, out var handler)) { var response = Client.CreateMessage(); @@ -119,6 +116,7 @@ namespace RageCoop.Client response.Write(id); handler(message.ReadBytes(len)).Pack(response); Client.SendMessage(response, NetDeliveryMethod.ReliableOrdered, message.SequenceChannel); + Client.FlushSendQueue(); } break; } diff --git a/RageCoop.Client/PlayerList.cs b/RageCoop.Client/PlayerList.cs index 3d9c497..9d940d1 100644 --- a/RageCoop.Client/PlayerList.cs +++ b/RageCoop.Client/PlayerList.cs @@ -75,11 +75,9 @@ namespace RageCoop.Client } public static void UpdatePlayer(Packets.PlayerInfoUpdate packet) { + if (packet.PedID == Main.LocalPlayerID) {Main.Logger.Debug("Latency updated"); Networking.Latency=packet.Latency; } var p = GetPlayer(packet.PedID); - if (p?.Character != null) - { - p.Latency= packet.Latency; - } + p.Latency= packet.Latency; } public static PlayerData GetPlayer(int id) { diff --git a/RageCoop.Client/RageCoop.Client.csproj b/RageCoop.Client/RageCoop.Client.csproj index 6f2bf01..feba17b 100644 --- a/RageCoop.Client/RageCoop.Client.csproj +++ b/RageCoop.Client/RageCoop.Client.csproj @@ -56,7 +56,6 @@ - @@ -257,4 +256,4 @@ cd /d $(ProjectDir) %26%26 copy ..\bin\$(Configuration)\Core\RageCoop.Core.dll $(OutDir)RageCoop.Core.dll /y - + \ No newline at end of file diff --git a/RageCoop.Client/Sync/SyncParameters.cs b/RageCoop.Client/Sync/SyncParameters.cs deleted file mode 100644 index 6defcc8..0000000 --- a/RageCoop.Client/Sync/SyncParameters.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace RageCoop.Client -{ - internal class SyncParameters - { - public static float PositioinPredictionDefault = 0.01f; - } -} diff --git a/RageCoop.Client/Util/Util.cs b/RageCoop.Client/Util/Util.cs index 433391f..d4ebdcc 100644 --- a/RageCoop.Client/Util/Util.cs +++ b/RageCoop.Client/Util/Util.cs @@ -160,9 +160,9 @@ namespace RageCoop.Client } } - public static Vector3 PredictPosition(this Entity e, bool applyDefault = true) + public static Vector3 PredictPosition(this Entity e) { - return e.ReadPosition()+e.Velocity*((applyDefault ? SyncParameters.PositioinPredictionDefault : 0)+Networking.Latency); + return e.ReadPosition()+e.Velocity*(Networking.Latency); } public static Vehicle CreateVehicle(Model model, Vector3 position, float heading = 0f) diff --git a/RageCoop.Core/Packets/Misc.cs b/RageCoop.Core/Packets/Misc.cs index a97be65..abf1aa3 100644 --- a/RageCoop.Core/Packets/Misc.cs +++ b/RageCoop.Core/Packets/Misc.cs @@ -12,9 +12,9 @@ namespace RageCoop.Core public override void Pack(NetOutgoingMessage message) { #region PacketToNetOutGoingMessage - message.Write((byte)PacketType.ChatMessage); - message.Write(0); - + message.Write((byte)PacketType.PingPong); + message.Write(1); + message.Write((byte)0); #endregion } diff --git a/RageCoop.Core/Packets/Packets.cs b/RageCoop.Core/Packets/Packets.cs index e2ca284..c026122 100644 --- a/RageCoop.Core/Packets/Packets.cs +++ b/RageCoop.Core/Packets/Packets.cs @@ -17,12 +17,8 @@ namespace RageCoop.Core PublicKeyResponse=5, Request=6, Response=7, - - ChatMessage=10, - // NativeCall=11, - // NativeResponse=12, - // Mod=13, - // CleanUpWorld=14, + PingPong = 8, + ChatMessage =10, FileTransferChunk=11, FileTransferRequest=12, diff --git a/RageCoop.Server/Server.cs b/RageCoop.Server/Server.cs index bf5f84e..322c2ae 100644 --- a/RageCoop.Server/Server.cs +++ b/RageCoop.Server/Server.cs @@ -85,7 +85,7 @@ namespace RageCoop.Server { while (!_stopping) { - foreach(var c in Clients.Values) + foreach(var c in Clients.Values.ToArray()) { c.UpdateLatency(); }