From 4e8749b9daa0a1c3717f3f5102a758ad45fa7fa5 Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Mon, 25 Sep 2023 15:21:42 -0500 Subject: [PATCH] fix: update DMPS InputChange event handler In some configurations, the InputChange handler can throw a null reference exception due to a Feedback for the input that triggered the event not existing. The event handler now checks for the existence of a Feedback for the input that triggered the event prior to attempting to call the `FireUpdate` method. Addresses #1136 --- .../Chassis/DmpsRoutingController.cs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/essentials-framework/Essentials DM/Essentials_DM/Chassis/DmpsRoutingController.cs b/essentials-framework/Essentials DM/Essentials_DM/Chassis/DmpsRoutingController.cs index a3092f71..27388f11 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Chassis/DmpsRoutingController.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Chassis/DmpsRoutingController.cs @@ -991,28 +991,41 @@ namespace PepperDash.Essentials.DM case (DMInputEventIds.OnlineFeedbackEventId): { Debug.Console(2, this, "DM Input OnlineFeedbackEventId for input: {0}. State: {1}", args.Number, device.Inputs[args.Number].EndpointOnlineFeedback); - InputEndpointOnlineFeedbacks[args.Number].FireUpdate(); + + if(!InputEndpointOnlineFeedbacks.ContainsKey(args.Number)){ + break; + } + InputEndpointOnlineFeedbacks[args.Number].FireUpdate(); break; } case (DMInputEventIds.EndpointOnlineEventId): { Debug.Console(2, this, "DM Input EndpointOnlineEventId for input: {0}. State: {1}", args.Number, device.Inputs[args.Number].EndpointOnlineFeedback); + + if(!InputEndpointOnlineFeedbacks.ContainsKey(args.Number)){ + break; + } InputEndpointOnlineFeedbacks[args.Number].FireUpdate(); break; } case (DMInputEventIds.VideoDetectedEventId): { Debug.Console(2, this, "DM Input {0} VideoDetectedEventId", args.Number); + + if(!VideoInputSyncFeedbacks.ContainsKey(args.Number)){ + break; + } VideoInputSyncFeedbacks[args.Number].FireUpdate(); break; } case (DMInputEventIds.InputNameEventId): { Debug.Console(2, this, "DM Input {0} NameFeedbackEventId", args.Number); - if(InputNameFeedbacks.ContainsKey(args.Number)) + if(!InputNameFeedbacks.ContainsKey(args.Number)) { - InputNameFeedbacks[args.Number].FireUpdate(); + break; } + InputNameFeedbacks[args.Number].FireUpdate(); break; } }