From 45b11114e1a5f3b877f76b5a8c71bc9201a4d7f6 Mon Sep 17 00:00:00 2001 From: goaaats Date: Thu, 3 Feb 2022 04:15:05 +0100 Subject: [PATCH] fix(ChatGui): use invocation lists and handle errors --- Dalamud/Game/Gui/ChatGui.cs | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/Dalamud/Game/Gui/ChatGui.cs b/Dalamud/Game/Gui/ChatGui.cs index 113981b4a..b2592fb77 100644 --- a/Dalamud/Game/Gui/ChatGui.cs +++ b/Dalamud/Game/Gui/ChatGui.cs @@ -328,11 +328,36 @@ namespace Dalamud.Game.Gui // Call events var isHandled = false; - this.CheckMessageHandled?.Invoke(chattype, senderid, ref parsedSender, ref parsedMessage, ref isHandled); + + var invocationList = this.CheckMessageHandled.GetInvocationList(); + foreach (var @delegate in invocationList) + { + try + { + var messageHandledDelegate = @delegate as OnCheckMessageHandledDelegate; + messageHandledDelegate!.Invoke(chattype, senderid, ref parsedSender, ref parsedMessage, ref isHandled); + } + catch (Exception e) + { + Log.Error(e, "Could not invoke registered OnCheckMessageHandledDelegate for {Name}", @delegate.Method.Name); + } + } if (!isHandled) { - this.ChatMessage?.Invoke(chattype, senderid, ref parsedSender, ref parsedMessage, ref isHandled); + invocationList = this.ChatMessage.GetInvocationList(); + foreach (var @delegate in invocationList) + { + try + { + var messageHandledDelegate = @delegate as OnMessageDelegate; + messageHandledDelegate!.Invoke(chattype, senderid, ref parsedSender, ref parsedMessage, ref isHandled); + } + catch (Exception e) + { + Log.Error(e, "Could not invoke registered OnMessageDelegate for {Name}", @delegate.Method.Name); + } + } } var newEdited = parsedMessage.Encode();