From a3f9631c4658769a5647da06d9343f45c42c4d91 Mon Sep 17 00:00:00 2001 From: Rutherther Date: Sat, 19 Feb 2022 12:13:44 +0100 Subject: [PATCH] feat(client): handle exception in client process packet --- .../NostaleLocalClient.cs | 60 +++++++++++-------- 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/src/Core/NosSmooth.LocalClient/NostaleLocalClient.cs b/src/Core/NosSmooth.LocalClient/NostaleLocalClient.cs index 7be9bba46e746be40bb9278ff6c71232b687e097..b1bdf3ad756c6f0cf1f6047e98d14c3a8c2f88ff 100644 --- a/src/Core/NosSmooth.LocalClient/NostaleLocalClient.cs +++ b/src/Core/NosSmooth.LocalClient/NostaleLocalClient.cs @@ -175,41 +175,49 @@ public class NostaleLocalClient : BaseNostaleClient private async Task ProcessPacketAsync(PacketSource type, string packetString) { - var packetResult = _packetSerializer.Deserialize(packetString, type); - IPacket packet; - if (!packetResult.IsSuccess) + try { - if (packetResult.Error is not PacketConverterNotFoundError) + var packetResult = _packetSerializer.Deserialize(packetString, type); + IPacket packet; + if (!packetResult.IsSuccess) { - _logger.LogWarning("Could not parse {Packet}. Reason:", packetString); - _logger.LogResultError(packetResult); - packet = new ParsingFailedPacket(packetResult, packetString); + if (packetResult.Error is not PacketConverterNotFoundError) + { + _logger.LogWarning("Could not parse {Packet}. Reason:", packetString); + _logger.LogResultError(packetResult); + packet = new ParsingFailedPacket(packetResult, packetString); + } + else + { + packet = new UnresolvedPacket(packetString.Split(' ')[0], packetString); + } } else { - packet = new UnresolvedPacket(packetString.Split(' ')[0], packetString); + packet = packetResult.Entity; } - } - else - { - packet = packetResult.Entity; - } - Result result; - if (type == PacketSource.Server) - { - result = await _packetHandler.HandleReceivedPacketAsync - (this, packet, packetString, _stopRequested ?? default); - } - else - { - result = await _packetHandler.HandleSentPacketAsync(this, packet, packetString, _stopRequested ?? default); - } + Result result; + if (type == PacketSource.Server) + { + result = await _packetHandler.HandleReceivedPacketAsync + (this, packet, packetString, _stopRequested ?? default); + } + else + { + result = await _packetHandler.HandleSentPacketAsync + (this, packet, packetString, _stopRequested ?? default); + } - if (!result.IsSuccess) + if (!result.IsSuccess) + { + _logger.LogError("There was an error whilst handling packet"); + _logger.LogResultError(result); + } + } + catch (Exception e) { - _logger.LogError("There was an error whilst handling packet"); - _logger.LogResultError(result); + _logger.LogError(e, "The process packet threw an exception"); } }