From d6338913782bae75a61222f55419191f496af9b3 Mon Sep 17 00:00:00 2001 From: Rutherther Date: Sat, 19 Feb 2022 11:57:35 +0100 Subject: [PATCH] fix(core): handle exceptions in packet handler --- Core/NosSmooth.Core/Packets/PacketHandler.cs | 92 ++++++++++++-------- 1 file changed, 57 insertions(+), 35 deletions(-) diff --git a/Core/NosSmooth.Core/Packets/PacketHandler.cs b/Core/NosSmooth.Core/Packets/PacketHandler.cs index 589a3b79dbdc414dd6e1c0cf8c3213be9d49d5b4..4df1b68bf2b535dfec552ea489bd5bbb4c4136d4 100644 --- a/Core/NosSmooth.Core/Packets/PacketHandler.cs +++ b/Core/NosSmooth.Core/Packets/PacketHandler.cs @@ -109,10 +109,18 @@ public class PacketHandler : IPacketHandler var packetResponders = scope.ServiceProvider.GetServices>(); var genericPacketResponders = scope.ServiceProvider.GetServices(); - var tasks = packetResponders.Select(responder => responder.Respond(packetEventArgs, ct)).ToList(); - tasks.AddRange(genericPacketResponders.Select(responder => responder.Respond(packetEventArgs, ct))); + Result[] results; + try + { + var tasks = packetResponders.Select(responder => responder.Respond(packetEventArgs, ct)).ToList(); + tasks.AddRange(genericPacketResponders.Select(responder => responder.Respond(packetEventArgs, ct))); - var results = await Task.WhenAll(tasks); + results = await Task.WhenAll(tasks); + } + catch (Exception e) + { + results = new Result[] { e }; + } var errors = new List(); foreach (var result in results) @@ -146,27 +154,34 @@ public class PacketHandler : IPacketHandler ) where TPacket : IPacket { - var results = await Task.WhenAll - ( - services.GetServices() - .Select(x => x.ExecuteBeforeExecutionAsync(client, eventArgs, ct)) - ); - - var errorResults = new List(); - foreach (var result in results) + try { - if (!result.IsSuccess) + var results = await Task.WhenAll + ( + services.GetServices() + .Select(x => x.ExecuteBeforeExecutionAsync(client, eventArgs, ct)) + ); + + var errorResults = new List(); + foreach (var result in results) { - errorResults.Add(result); + if (!result.IsSuccess) + { + errorResults.Add(result); + } } - } - return errorResults.Count switch + return errorResults.Count switch + { + 1 => errorResults[0], + 0 => Result.FromSuccess(), + _ => new AggregateError(errorResults.Cast().ToArray()) + }; + } + catch (Exception e) { - 1 => errorResults[0], - 0 => Result.FromSuccess(), - _ => new AggregateError(errorResults.Cast().ToArray()) - }; + return e; + } } private async Task ExecuteAfterExecutionAsync @@ -179,26 +194,33 @@ public class PacketHandler : IPacketHandler ) where TPacket : IPacket { - var results = await Task.WhenAll - ( - services.GetServices() - .Select(x => x.ExecuteAfterExecutionAsync(client, eventArgs, executionResults, ct)) - ); - - var errorResults = new List(); - foreach (var result in results) + try { - if (!result.IsSuccess) + var results = await Task.WhenAll + ( + services.GetServices() + .Select(x => x.ExecuteAfterExecutionAsync(client, eventArgs, executionResults, ct)) + ); + + var errorResults = new List(); + foreach (var result in results) { - errorResults.Add(result); + if (!result.IsSuccess) + { + errorResults.Add(result); + } } - } - return errorResults.Count switch + return errorResults.Count switch + { + 1 => errorResults[0], + 0 => Result.FromSuccess(), + _ => new AggregateError(errorResults.Cast().ToArray()) + }; + } + catch (Exception e) { - 1 => errorResults[0], - 0 => Result.FromSuccess(), - _ => new AggregateError(errorResults.Cast().ToArray()) - }; + return e; + } } } \ No newline at end of file