diff --git a/MinecraftClient/Protocol/Handlers/Protocol18.cs b/MinecraftClient/Protocol/Handlers/Protocol18.cs index 6f273df8..6c269d42 100644 --- a/MinecraftClient/Protocol/Handlers/Protocol18.cs +++ b/MinecraftClient/Protocol/Handlers/Protocol18.cs @@ -172,27 +172,44 @@ namespace MinecraftClient.Protocol.Handlers /// private void Updater(object? o) { - if (((CancellationToken)o!).IsCancellationRequested) return; try { - - bool keepUpdating = true; - Stopwatch stopWatch = new Stopwatch(); - while (keepUpdating) + Stopwatch stopWatch = new(); + while (!packetQueue.IsAddingCompleted) { - ((CancellationToken)o!).ThrowIfCancellationRequested(); + handler.OnUpdate(); + stopWatch.Start(); - keepUpdating = Update(); + while (packetQueue.TryTake(out Tuple>? packetInfo)) + { + (int packetID, Queue packetData) = packetInfo; + + HandlePacket(packetID, packetData); + + if (handler.GetNetworkPacketCaptureEnabled()) + { + List clone = packetData.ToList(); + handler.OnNetworkPacket(packetID, clone, login_phase, true); + } + + stopWatch.Stop(); + if (stopWatch.Elapsed.Milliseconds >= 100) + { + stopWatch.Reset(); + handler.OnUpdate(); + } + stopWatch.Start(); + } stopWatch.Stop(); - int elapsed = stopWatch.Elapsed.Milliseconds; + + if (stopWatch.Elapsed.Milliseconds < 100) + Thread.Sleep(100 - stopWatch.Elapsed.Milliseconds); stopWatch.Reset(); - if (elapsed < 100) - Thread.Sleep(100 - elapsed); } } catch (System.IO.IOException) { } @@ -206,33 +223,6 @@ namespace MinecraftClient.Protocol.Handlers handler.OnConnectionLost(ChatBot.DisconnectReason.ConnectionLost, ""); } - /// - /// Read data from the network. Should be called on a separate thread. - /// - /// FALSE if an error occured, TRUE otherwise. - private bool Update() - { - handler.OnUpdate(); - - if (packetQueue.IsAddingCompleted) - return false; - - while (packetQueue.TryTake(out Tuple>? packetInfo)) - { - (int packetID, Queue packetData) = packetInfo; - - HandlePacket(packetID, packetData); - - if (handler.GetNetworkPacketCaptureEnabled()) - { - List clone = packetData.ToList(); - handler.OnNetworkPacket(packetID, clone, login_phase, true); - } - } - - return true; - } - /// /// Read and decompress packets. ///