From 0b60f53d0edd25b8dd19e765c421f9fd0683bf85 Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Wed, 13 Nov 2024 12:15:25 -0700 Subject: [PATCH 01/10] feat: Adds IEssentialsRoomEmergency interface and implements on contact closure device to provide state --- .../EsentialsRoomEmergencyContactClosure.cs | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/PepperDash.Essentials.Core/Room/EsentialsRoomEmergencyContactClosure.cs b/src/PepperDash.Essentials.Core/Room/EsentialsRoomEmergencyContactClosure.cs index 7ad7f700..2be18f09 100644 --- a/src/PepperDash.Essentials.Core/Room/EsentialsRoomEmergencyContactClosure.cs +++ b/src/PepperDash.Essentials.Core/Room/EsentialsRoomEmergencyContactClosure.cs @@ -4,12 +4,16 @@ using PepperDash.Essentials.Room.Config; namespace PepperDash.Essentials.Core { - public class EssentialsRoomEmergencyContactClosure : EssentialsRoomEmergencyBase + public class EssentialsRoomEmergencyContactClosure : EssentialsRoomEmergencyBase, IEssentialsRoomEmergency { + public event EventHandler EmergencyStateChange; + IEssentialsRoom Room; string Behavior; bool TriggerOnClose; + public bool InEmergency { get; private set; } + public EssentialsRoomEmergencyContactClosure(string key, EssentialsRoomEmergencyConfig config, IEssentialsRoom room) : base(key) { @@ -32,7 +36,18 @@ namespace PepperDash.Essentials.Core void EsentialsRoomEmergencyContactClosure_StateChange(DigitalInput digitalInput, DigitalInputEventArgs args) { if (args.State && TriggerOnClose || !args.State && !TriggerOnClose) + { + InEmergency = true; + if (EmergencyStateChange != null) + EmergencyStateChange(this, new EventArgs()); RunEmergencyBehavior(); + } + else + { + InEmergency = false; + if (EmergencyStateChange != null) + EmergencyStateChange(this, new EventArgs()); + } } /// @@ -44,4 +59,14 @@ namespace PepperDash.Essentials.Core Room.Shutdown(); } } + + /// + /// Describes the functionality of a room emergency contact closure + /// + public interface IEssentialsRoomEmergency + { + event EventHandler EmergencyStateChange; + + bool InEmergency { get; } + } } \ No newline at end of file From cd52c245a68e974403254f217ee235a475a459a7 Mon Sep 17 00:00:00 2001 From: Andrew Knous Date: Thu, 14 Nov 2024 16:23:31 -0500 Subject: [PATCH 02/10] feat: adds emergency OSD support --- .../DeviceTypeInterfaces/IEmergencyOSD.cs | 14 ++++++++++ .../Room/Config/EssentialsRoomConfig.cs | 1 + .../EsentialsRoomEmergencyContactClosure.cs | 26 ++++++++++++++++++- 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IEmergencyOSD.cs diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IEmergencyOSD.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IEmergencyOSD.cs new file mode 100644 index 00000000..d35fcfa8 --- /dev/null +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IEmergencyOSD.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace PepperDash.Essentials.Core.DeviceTypeInterfaces +{ + public interface IEmergencyOSD + { + void ShowEmergencyMessage(); + void HideEmergencyMessage(); + } +} diff --git a/src/PepperDash.Essentials.Core/Room/Config/EssentialsRoomConfig.cs b/src/PepperDash.Essentials.Core/Room/Config/EssentialsRoomConfig.cs index 3f457176..e9a2c29b 100644 --- a/src/PepperDash.Essentials.Core/Room/Config/EssentialsRoomConfig.cs +++ b/src/PepperDash.Essentials.Core/Room/Config/EssentialsRoomConfig.cs @@ -24,6 +24,7 @@ namespace PepperDash.Essentials.Room.Config //switch on emergency type here. Right now only contact and shutdown var e = new EssentialsRoomEmergencyContactClosure(room.Key + "-emergency", props.Emergency, room); DeviceManager.AddDevice(e); + return e; } return null; } diff --git a/src/PepperDash.Essentials.Core/Room/EsentialsRoomEmergencyContactClosure.cs b/src/PepperDash.Essentials.Core/Room/EsentialsRoomEmergencyContactClosure.cs index 2be18f09..35681680 100644 --- a/src/PepperDash.Essentials.Core/Room/EsentialsRoomEmergencyContactClosure.cs +++ b/src/PepperDash.Essentials.Core/Room/EsentialsRoomEmergencyContactClosure.cs @@ -29,13 +29,37 @@ namespace PepperDash.Essentials.Core cs.DigitalInputPorts[portNum].StateChange += EsentialsRoomEmergencyContactClosure_StateChange; } } + else if (config.Trigger.Type.Equals("versiport", StringComparison.OrdinalIgnoreCase)) + { + var portNum = (uint)config.Trigger.Number; + if (portNum <= cs.NumberOfVersiPorts) + { + cs.VersiPorts[portNum].Register(); + cs.VersiPorts[portNum].SetVersiportConfiguration(eVersiportConfiguration.DigitalInput); + cs.VersiPorts[portNum].DisablePullUpResistor = true; + cs.VersiPorts[portNum].VersiportChange += EssentialsRoomEmergencyContactClosure_VersiportChange; ; + } + } Behavior = config.Behavior; TriggerOnClose = config.Trigger.TriggerOnClose; } + private void EssentialsRoomEmergencyContactClosure_VersiportChange(Versiport port, VersiportEventArgs args) + { + if (args.Event == eVersiportEvent.DigitalInChange) + { + ContactClosure_StateChange(port.DigitalIn); + } + } + void EsentialsRoomEmergencyContactClosure_StateChange(DigitalInput digitalInput, DigitalInputEventArgs args) { - if (args.State && TriggerOnClose || !args.State && !TriggerOnClose) + ContactClosure_StateChange(args.State); + } + + void ContactClosure_StateChange(bool portState) + { + if (portState && TriggerOnClose || !portState && !TriggerOnClose) { InEmergency = true; if (EmergencyStateChange != null) From cd81b8af738a86aab28b6405399c2634f074998a Mon Sep 17 00:00:00 2001 From: Andrew Knous Date: Thu, 14 Nov 2024 17:00:21 -0500 Subject: [PATCH 03/10] feat: adds roomKey to ShowEmergencyMessage --- .../DeviceTypeInterfaces/IEmergencyOSD.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IEmergencyOSD.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IEmergencyOSD.cs index d35fcfa8..506f904e 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IEmergencyOSD.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IEmergencyOSD.cs @@ -8,7 +8,7 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces { public interface IEmergencyOSD { - void ShowEmergencyMessage(); + void ShowEmergencyMessage(string roomKey); void HideEmergencyMessage(); } } From f68b1e9e4943b6150de543e59f3d765b65b4ac4a Mon Sep 17 00:00:00 2001 From: Andrew Knous Date: Tue, 19 Nov 2024 09:19:48 -0800 Subject: [PATCH 04/10] feat: cleans up code, adds versiport comment, changes ShowEmergencyMessage arg name to "url" --- .../DeviceTypeInterfaces/IEmergencyOSD.cs | 2 +- .../Room/Config/EssentialsRoomEmergencyConfig.cs | 2 +- .../Room/EsentialsRoomEmergencyContactClosure.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IEmergencyOSD.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IEmergencyOSD.cs index 506f904e..7d158027 100644 --- a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IEmergencyOSD.cs +++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IEmergencyOSD.cs @@ -8,7 +8,7 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces { public interface IEmergencyOSD { - void ShowEmergencyMessage(string roomKey); + void ShowEmergencyMessage(string url); void HideEmergencyMessage(); } } diff --git a/src/PepperDash.Essentials.Core/Room/Config/EssentialsRoomEmergencyConfig.cs b/src/PepperDash.Essentials.Core/Room/Config/EssentialsRoomEmergencyConfig.cs index 76199a91..dbc068eb 100644 --- a/src/PepperDash.Essentials.Core/Room/Config/EssentialsRoomEmergencyConfig.cs +++ b/src/PepperDash.Essentials.Core/Room/Config/EssentialsRoomEmergencyConfig.cs @@ -16,7 +16,7 @@ public class EssentialsRoomEmergencyTriggerConfig { /// - /// contact, + /// contact,versiport /// public string Type { get; set; } /// diff --git a/src/PepperDash.Essentials.Core/Room/EsentialsRoomEmergencyContactClosure.cs b/src/PepperDash.Essentials.Core/Room/EsentialsRoomEmergencyContactClosure.cs index 35681680..48d24ab0 100644 --- a/src/PepperDash.Essentials.Core/Room/EsentialsRoomEmergencyContactClosure.cs +++ b/src/PepperDash.Essentials.Core/Room/EsentialsRoomEmergencyContactClosure.cs @@ -37,7 +37,7 @@ namespace PepperDash.Essentials.Core cs.VersiPorts[portNum].Register(); cs.VersiPorts[portNum].SetVersiportConfiguration(eVersiportConfiguration.DigitalInput); cs.VersiPorts[portNum].DisablePullUpResistor = true; - cs.VersiPorts[portNum].VersiportChange += EssentialsRoomEmergencyContactClosure_VersiportChange; ; + cs.VersiPorts[portNum].VersiportChange += EssentialsRoomEmergencyContactClosure_VersiportChange; } } Behavior = config.Behavior; From 54dcb5de087e4e0d53869accb9e80723ea860505 Mon Sep 17 00:00:00 2001 From: Nick Genovese Date: Thu, 30 Jan 2025 15:21:12 -0500 Subject: [PATCH 05/10] feat: implement IPartitionStateProvider to Generic VersaPortInput --- .../CrestronIO/GenericVersiportInputDevice.cs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/PepperDash.Essentials.Core/CrestronIO/GenericVersiportInputDevice.cs b/src/PepperDash.Essentials.Core/CrestronIO/GenericVersiportInputDevice.cs index 5ed1bfa8..c9133a60 100644 --- a/src/PepperDash.Essentials.Core/CrestronIO/GenericVersiportInputDevice.cs +++ b/src/PepperDash.Essentials.Core/CrestronIO/GenericVersiportInputDevice.cs @@ -21,7 +21,7 @@ namespace PepperDash.Essentials.Core.CrestronIO /// /// Represents a generic digital input deviced tied to a versiport /// - public class GenericVersiportDigitalInputDevice : EssentialsBridgeableDevice, IDigitalInput + public class GenericVersiportDigitalInputDevice : EssentialsBridgeableDevice, IDigitalInput, IPartitionStateProvider { public Versiport InputPort { get; private set; } @@ -35,10 +35,15 @@ namespace PepperDash.Essentials.Core.CrestronIO } } + public BoolFeedback PartitionPresentFeedback { get; } + + public bool PartitionPresent => !InputStateFeedbackFunc(); + public GenericVersiportDigitalInputDevice(string key, string name, Func postActivationFunc, IOPortConfig config) : base(key, name) { InputStateFeedback = new BoolFeedback(InputStateFeedbackFunc); + PartitionPresentFeedback = new BoolFeedback(() => !InputStateFeedbackFunc()); AddPostActivationAction(() => { @@ -52,7 +57,8 @@ namespace PepperDash.Essentials.Core.CrestronIO InputPort.VersiportChange += InputPort_VersiportChange; - + InputStateFeedback.FireUpdate(); + PartitionPresentFeedback.FireUpdate(); Debug.LogMessage(LogEventLevel.Debug, this, "Created GenericVersiportDigitalInputDevice on port '{0}'. DisablePullUpResistor: '{1}'", config.PortNumber, InputPort.DisablePullUpResistor); @@ -65,7 +71,10 @@ namespace PepperDash.Essentials.Core.CrestronIO Debug.LogMessage(LogEventLevel.Debug, this, "Versiport change: {0}", args.Event); if(args.Event == eVersiportEvent.DigitalInChange) + { InputStateFeedback.FireUpdate(); + PartitionPresentFeedback.FireUpdate(); + } } From fb4f1482c70840baa9720cec3be74c5c1c2559ae Mon Sep 17 00:00:00 2001 From: Nick Genovese Date: Fri, 31 Jan 2025 19:33:31 -0500 Subject: [PATCH 06/10] fix: small null check in the release and make route method --- src/PepperDash.Essentials.Core/Routing/Extensions.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/PepperDash.Essentials.Core/Routing/Extensions.cs b/src/PepperDash.Essentials.Core/Routing/Extensions.cs index fccaa80c..1956ed27 100644 --- a/src/PepperDash.Essentials.Core/Routing/Extensions.cs +++ b/src/PepperDash.Essentials.Core/Routing/Extensions.cs @@ -179,7 +179,8 @@ namespace PepperDash.Essentials.Core if (!destination.GetRouteToSource(source, null, null, signalType, 0, singleTypeRouteDescriptor, destinationPort, sourcePort)) singleTypeRouteDescriptor = null; - foreach (var route in singleTypeRouteDescriptor.Routes) + var routes = singleTypeRouteDescriptor?.Routes ?? new List(); + foreach (var route in routes) { Debug.LogMessage(LogEventLevel.Verbose, "Route for device: {route}", destination, route.ToString()); } From 8108b9dfdb167317f187056a1d0351308e743b00 Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Tue, 18 Feb 2025 11:59:26 -0600 Subject: [PATCH 07/10] fix: attempt to get better logging for exception Fixed some issues with log messages that were not formatted correctly for Serilog. --- .../Routing/Extensions.cs | 29 +++++++++++-------- .../Routing/RouteDescriptorCollection.cs | 8 ++--- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/PepperDash.Essentials.Core/Routing/Extensions.cs b/src/PepperDash.Essentials.Core/Routing/Extensions.cs index 1956ed27..f7b235ae 100644 --- a/src/PepperDash.Essentials.Core/Routing/Extensions.cs +++ b/src/PepperDash.Essentials.Core/Routing/Extensions.cs @@ -141,23 +141,28 @@ namespace PepperDash.Essentials.Core /// public static void ReleaseRoute(this IRoutingInputs destination, string inputPortKey) { - - Debug.LogMessage(LogEventLevel.Information, "Release route for {inputPortKey}", destination, string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey); - - if (RouteRequests.TryGetValue(destination.Key, out RouteRequest existingRequest) && destination is IWarmingCooling) + try { - var coolingDevice = destination as IWarmingCooling; + Debug.LogMessage(LogEventLevel.Information, "Release route for '{destination}':'{inputPortKey}'", destination?.Key ?? "", string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey); - coolingDevice.IsCoolingDownFeedback.OutputChange -= existingRequest.HandleCooldown; - } + if (RouteRequests.TryGetValue(destination.Key, out RouteRequest existingRequest) && destination is IWarmingCooling) + { + var coolingDevice = destination as IWarmingCooling; - RouteRequests.Remove(destination.Key); + coolingDevice.IsCoolingDownFeedback.OutputChange -= existingRequest.HandleCooldown; + } - var current = RouteDescriptorCollection.DefaultCollection.RemoveRouteDescriptor(destination, inputPortKey); - if (current != null) + RouteRequests.Remove(destination.Key); + + var current = RouteDescriptorCollection.DefaultCollection.RemoveRouteDescriptor(destination, inputPortKey); + if (current != null) + { + Debug.LogMessage(LogEventLevel.Information, "Releasing current route: {0}", destination, current.Source.Key); + current.ReleaseRoutes(); + } + } catch (Exception ex) { - Debug.LogMessage(LogEventLevel.Debug, "Releasing current route: {0}", destination, current.Source.Key); - current.ReleaseRoutes(); + Debug.LogMessage(ex, "Exception releasing route for '{destination}':'{inputPortKey}'",null, destination?.Key ?? "", string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey); } } diff --git a/src/PepperDash.Essentials.Core/Routing/RouteDescriptorCollection.cs b/src/PepperDash.Essentials.Core/Routing/RouteDescriptorCollection.cs index 6c4a5df5..d058872e 100644 --- a/src/PepperDash.Essentials.Core/Routing/RouteDescriptorCollection.cs +++ b/src/PepperDash.Essentials.Core/Routing/RouteDescriptorCollection.cs @@ -53,14 +53,14 @@ namespace PepperDash.Essentials.Core /// null if no RouteDescriptor for a destination exists public RouteDescriptor GetRouteDescriptorForDestination(IRoutingInputs destination) { - Debug.LogMessage(LogEventLevel.Debug, "Getting route descriptor", destination); + Debug.LogMessage(LogEventLevel.Information, "Getting route descriptor for '{destination}'", destination?.Key ?? ""); return RouteDescriptors.FirstOrDefault(rd => rd.Destination == destination); } public RouteDescriptor GetRouteDescriptorForDestinationAndInputPort(IRoutingInputs destination, string inputPortKey) { - Debug.LogMessage(LogEventLevel.Debug, "Getting route descriptor for {inputPortKey}", destination, string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey); + Debug.LogMessage(LogEventLevel.Information, "Getting route descriptor for '{destination}':'{inputPortKey}'", destination?.Key ?? "", string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey); return RouteDescriptors.FirstOrDefault(rd => rd.Destination == destination && rd.InputPort != null && rd.InputPort.Key == inputPortKey); } @@ -70,7 +70,7 @@ namespace PepperDash.Essentials.Core /// public RouteDescriptor RemoveRouteDescriptor(IRoutingInputs destination, string inputPortKey = "") { - Debug.LogMessage(LogEventLevel.Debug, "Removing route descriptor for {inputPortKey}", destination, string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey); + Debug.LogMessage(LogEventLevel.Information, "Removing route descriptor for '{destination}':'{inputPortKey}'", destination.Key ?? "", string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey); var descr = string.IsNullOrEmpty(inputPortKey) ? GetRouteDescriptorForDestination(destination) @@ -78,7 +78,7 @@ namespace PepperDash.Essentials.Core if (descr != null) RouteDescriptors.Remove(descr); - Debug.LogMessage(LogEventLevel.Debug, "Found route descriptor {routeDescriptor}", destination, descr); + Debug.LogMessage(LogEventLevel.Information, "Found route descriptor {routeDescriptor}", destination, descr); return descr; } From 5516ed16c3af970a7574f2111e2931ed6baa40f4 Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Tue, 18 Feb 2025 12:02:52 -0600 Subject: [PATCH 08/10] fix: use null instead of empty string to make it clearer what's happening --- src/PepperDash.Essentials.Core/Routing/Extensions.cs | 4 ++-- .../Routing/RouteDescriptorCollection.cs | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/PepperDash.Essentials.Core/Routing/Extensions.cs b/src/PepperDash.Essentials.Core/Routing/Extensions.cs index f7b235ae..b3c02e4e 100644 --- a/src/PepperDash.Essentials.Core/Routing/Extensions.cs +++ b/src/PepperDash.Essentials.Core/Routing/Extensions.cs @@ -143,7 +143,7 @@ namespace PepperDash.Essentials.Core { try { - Debug.LogMessage(LogEventLevel.Information, "Release route for '{destination}':'{inputPortKey}'", destination?.Key ?? "", string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey); + Debug.LogMessage(LogEventLevel.Information, "Release route for '{destination}':'{inputPortKey}'", destination?.Key ?? null, string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey); if (RouteRequests.TryGetValue(destination.Key, out RouteRequest existingRequest) && destination is IWarmingCooling) { @@ -162,7 +162,7 @@ namespace PepperDash.Essentials.Core } } catch (Exception ex) { - Debug.LogMessage(ex, "Exception releasing route for '{destination}':'{inputPortKey}'",null, destination?.Key ?? "", string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey); + Debug.LogMessage(ex, "Exception releasing route for '{destination}':'{inputPortKey}'",null, destination?.Key ?? null, string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey); } } diff --git a/src/PepperDash.Essentials.Core/Routing/RouteDescriptorCollection.cs b/src/PepperDash.Essentials.Core/Routing/RouteDescriptorCollection.cs index d058872e..51d0aa4b 100644 --- a/src/PepperDash.Essentials.Core/Routing/RouteDescriptorCollection.cs +++ b/src/PepperDash.Essentials.Core/Routing/RouteDescriptorCollection.cs @@ -53,14 +53,14 @@ namespace PepperDash.Essentials.Core /// null if no RouteDescriptor for a destination exists public RouteDescriptor GetRouteDescriptorForDestination(IRoutingInputs destination) { - Debug.LogMessage(LogEventLevel.Information, "Getting route descriptor for '{destination}'", destination?.Key ?? ""); + Debug.LogMessage(LogEventLevel.Information, "Getting route descriptor for '{destination}'", destination?.Key ?? null); return RouteDescriptors.FirstOrDefault(rd => rd.Destination == destination); } public RouteDescriptor GetRouteDescriptorForDestinationAndInputPort(IRoutingInputs destination, string inputPortKey) { - Debug.LogMessage(LogEventLevel.Information, "Getting route descriptor for '{destination}':'{inputPortKey}'", destination?.Key ?? "", string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey); + Debug.LogMessage(LogEventLevel.Information, "Getting route descriptor for '{destination}':'{inputPortKey}'", destination?.Key ?? null, string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey); return RouteDescriptors.FirstOrDefault(rd => rd.Destination == destination && rd.InputPort != null && rd.InputPort.Key == inputPortKey); } @@ -70,7 +70,7 @@ namespace PepperDash.Essentials.Core /// public RouteDescriptor RemoveRouteDescriptor(IRoutingInputs destination, string inputPortKey = "") { - Debug.LogMessage(LogEventLevel.Information, "Removing route descriptor for '{destination}':'{inputPortKey}'", destination.Key ?? "", string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey); + Debug.LogMessage(LogEventLevel.Information, "Removing route descriptor for '{destination}':'{inputPortKey}'", destination.Key ?? null, string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey); var descr = string.IsNullOrEmpty(inputPortKey) ? GetRouteDescriptorForDestination(destination) From 30d5e2b0810b245d2ceb2b583a3a7362485005e4 Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Tue, 18 Feb 2025 14:00:53 -0600 Subject: [PATCH 09/10] fix: add more exception handling Also add null check for `AddRouteDescriptor` method --- .../Routing/Extensions.cs | 40 +++++++++++-------- .../Routing/RouteDescriptorCollection.cs | 2 +- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/PepperDash.Essentials.Core/Routing/Extensions.cs b/src/PepperDash.Essentials.Core/Routing/Extensions.cs index b3c02e4e..ec642aee 100644 --- a/src/PepperDash.Essentials.Core/Routing/Extensions.cs +++ b/src/PepperDash.Essentials.Core/Routing/Extensions.cs @@ -108,25 +108,31 @@ namespace PepperDash.Essentials.Core private static void RunRouteRequest(RouteRequest request) { - if (request.Source == null) - return; - - var (audioOrSingleRoute, videoRoute) = request.Destination.GetRouteToSource(request.Source, request.SignalType, request.DestinationPort, request.SourcePort); - - if (audioOrSingleRoute == null && videoRoute == null) - return; - - RouteDescriptorCollection.DefaultCollection.AddRouteDescriptor(audioOrSingleRoute); - - if (videoRoute != null) + try { - RouteDescriptorCollection.DefaultCollection.AddRouteDescriptor(videoRoute); + if (request.Source == null) + return; + + var (audioOrSingleRoute, videoRoute) = request.Destination.GetRouteToSource(request.Source, request.SignalType, request.DestinationPort, request.SourcePort); + + if (audioOrSingleRoute == null && videoRoute == null) + return; + + RouteDescriptorCollection.DefaultCollection.AddRouteDescriptor(audioOrSingleRoute); + + if (videoRoute != null) + { + RouteDescriptorCollection.DefaultCollection.AddRouteDescriptor(videoRoute); + } + + Debug.LogMessage(LogEventLevel.Verbose, "Executing full route", request.Destination); + + audioOrSingleRoute.ExecuteRoutes(); + videoRoute?.ExecuteRoutes(); + } catch(Exception ex) + { + Debug.LogMessage(ex,"Exception Running Route Request", null, ) } - - Debug.LogMessage(LogEventLevel.Verbose, "Executing full route", request.Destination); - - audioOrSingleRoute.ExecuteRoutes(); - videoRoute?.ExecuteRoutes(); } public static void ReleaseRoute(this IRoutingInputs destination) diff --git a/src/PepperDash.Essentials.Core/Routing/RouteDescriptorCollection.cs b/src/PepperDash.Essentials.Core/Routing/RouteDescriptorCollection.cs index 51d0aa4b..9bafc128 100644 --- a/src/PepperDash.Essentials.Core/Routing/RouteDescriptorCollection.cs +++ b/src/PepperDash.Essentials.Core/Routing/RouteDescriptorCollection.cs @@ -41,7 +41,7 @@ namespace PepperDash.Essentials.Core && RouteDescriptors.Any(t => t.Destination == descriptor.Destination && t.InputPort != null && descriptor.InputPort != null && t.InputPort.Key == descriptor.InputPort.Key)) { Debug.LogMessage(LogEventLevel.Debug, descriptor.Destination, - "Route to [{0}] already exists in global routes table", descriptor.Source.Key); + "Route to [{0}] already exists in global routes table", descriptor?.Source?.Key); return; } RouteDescriptors.Add(descriptor); From 261779d4c4ab3840908d455699183753e16b5dfe Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Tue, 18 Feb 2025 14:04:30 -0600 Subject: [PATCH 10/10] fix: actually log exception correctly --- src/PepperDash.Essentials.Core/Routing/Extensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PepperDash.Essentials.Core/Routing/Extensions.cs b/src/PepperDash.Essentials.Core/Routing/Extensions.cs index ec642aee..ee885abf 100644 --- a/src/PepperDash.Essentials.Core/Routing/Extensions.cs +++ b/src/PepperDash.Essentials.Core/Routing/Extensions.cs @@ -131,7 +131,7 @@ namespace PepperDash.Essentials.Core videoRoute?.ExecuteRoutes(); } catch(Exception ex) { - Debug.LogMessage(ex,"Exception Running Route Request", null, ) + Debug.LogMessage(ex, "Exception Running Route Request {request}", null, request); } }