From 1387e0853637f9426e9392dc98fbc432b2c7ef18 Mon Sep 17 00:00:00 2001 From: rootdarkarchon Date: Sun, 18 Jun 2023 23:02:04 +0200 Subject: [PATCH] w/e --- .../Services/Mediator/MareMediator.cs | 39 +++++++++---------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/MareSynchronos/Services/Mediator/MareMediator.cs b/MareSynchronos/Services/Mediator/MareMediator.cs index 45f6fa1..dddc676 100644 --- a/MareSynchronos/Services/Mediator/MareMediator.cs +++ b/MareSynchronos/Services/Mediator/MareMediator.cs @@ -128,31 +128,30 @@ public sealed class MareMediator : IHostedService private void ExecuteMessage(MessageBase message) { - if (_subscriberDict.TryGetValue(message.GetType(), out HashSet? subscribers) && subscribers != null && subscribers.Any()) + if (!_subscriberDict.TryGetValue(message.GetType(), out HashSet? subscribers) || subscribers == null || !subscribers.Any()) return; + + HashSet subscribersCopy = new HashSet(); + lock (_addRemoveLock) { - HashSet subscribersCopy = new HashSet(); - lock (_addRemoveLock) + subscribersCopy = subscribers?.Where(s => s.Subscriber != null).ToHashSet() ?? new HashSet(); + } + + foreach (SubscriberAction subscriber in subscribersCopy) + { + try { - subscribersCopy = subscribers?.Where(s => s.Subscriber != null).ToHashSet() ?? new HashSet(); + typeof(MareMediator) + .GetMethod(nameof(ExecuteSubscriber), System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)? + .MakeGenericMethod(message.GetType()) + .Invoke(this, new object[] { subscriber, message }); } - - foreach (SubscriberAction subscriber in subscribersCopy) + catch (Exception ex) { - try - { - typeof(MareMediator) - .GetMethod(nameof(ExecuteSubscriber), System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)? - .MakeGenericMethod(message.GetType()) - .Invoke(this, new object[] { subscriber, message }); - } - catch (Exception ex) - { - if (_lastErrorTime.TryGetValue(subscriber, out var lastErrorTime) && lastErrorTime.Add(TimeSpan.FromSeconds(10)) > DateTime.UtcNow) - continue; + if (_lastErrorTime.TryGetValue(subscriber, out var lastErrorTime) && lastErrorTime.Add(TimeSpan.FromSeconds(10)) > DateTime.UtcNow) + continue; - _logger.LogCritical(ex, "Error executing {type} for subscriber {subscriber}", message.GetType().Name, subscriber.Subscriber.GetType().Name); - _lastErrorTime[subscriber] = DateTime.UtcNow; - } + _logger.LogCritical(ex, "Error executing {type} for subscriber {subscriber}", message.GetType().Name, subscriber.Subscriber.GetType().Name); + _lastErrorTime[subscriber] = DateTime.UtcNow; } } }