From f1fa3c07fdcf9b4b8a3c4e39aefdcc55064755b4 Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Wed, 10 Feb 2021 14:15:00 -0700 Subject: [PATCH] #605 Adds try/catch and more meaningful messages when adding static assets fails --- ...ssentialsTechRoomFusionSystemController.cs | 26 ++++++------ ...lsHuddleSpaceFusionSystemControllerBase.cs | 40 +++++++++++++++---- 2 files changed, 47 insertions(+), 19 deletions(-) diff --git a/PepperDashEssentials/Fusion/EssentialsTechRoomFusionSystemController.cs b/PepperDashEssentials/Fusion/EssentialsTechRoomFusionSystemController.cs index 7e465b4d..b4cfbf3e 100644 --- a/PepperDashEssentials/Fusion/EssentialsTechRoomFusionSystemController.cs +++ b/PepperDashEssentials/Fusion/EssentialsTechRoomFusionSystemController.cs @@ -30,27 +30,29 @@ namespace PepperDash.Essentials.Fusion foreach (var display in displays.Values.Cast()) { - Debug.Console(2, this, "Setting up Static Asset for {0}", display.Key); + var disp = display; // Local scope variable - display.UsageTracker = new UsageTracking(display) { UsageIsTracked = true }; - display.UsageTracker.DeviceUsageEnded += UsageTracker_DeviceUsageEnded; + Debug.Console(2, this, "Setting up Static Asset for {0}", disp.Key); + + disp.UsageTracker = new UsageTracking(disp) { UsageIsTracked = true }; + disp.UsageTracker.DeviceUsageEnded += UsageTracker_DeviceUsageEnded; var dispPowerOnAction = new Action(b => { if (!b) { - display.PowerOn(); + disp.PowerOn(); } }); var dispPowerOffAction = new Action(b => { if (!b) { - display.PowerOff(); + disp.PowerOff(); } }); - var deviceConfig = ConfigReader.ConfigObject.GetDeviceForKey(display.Key); + var deviceConfig = ConfigReader.ConfigObject.GetDeviceForKey(disp.Key); FusionAsset tempAsset; @@ -63,7 +65,7 @@ namespace PepperDash.Essentials.Fusion { // Create a new asset tempAsset = new FusionAsset(FusionRoomGuids.GetNextAvailableAssetNumber(FusionRoom), - display.Name, "Display", ""); + disp.Name, "Display", ""); FusionStaticAssets.Add(deviceConfig.Uid, tempAsset); } @@ -72,21 +74,21 @@ namespace PepperDash.Essentials.Fusion dispAsset.PowerOn.OutputSig.UserObject = dispPowerOnAction; dispAsset.PowerOff.OutputSig.UserObject = dispPowerOffAction; - var defaultTwoWayDisplay = display as IHasPowerControlWithFeedback; + var defaultTwoWayDisplay = disp as IHasPowerControlWithFeedback; if (defaultTwoWayDisplay != null) { defaultTwoWayDisplay.PowerIsOnFeedback.LinkInputSig(FusionRoom.DisplayPowerOn.InputSig); - if (display is IDisplayUsage) + if (disp is IDisplayUsage) { - (display as IDisplayUsage).LampHours.LinkInputSig(FusionRoom.DisplayUsage.InputSig); + (disp as IDisplayUsage).LampHours.LinkInputSig(FusionRoom.DisplayUsage.InputSig); } defaultTwoWayDisplay.PowerIsOnFeedback.LinkInputSig(dispAsset.PowerOn.InputSig); } // Use extension methods - dispAsset.TrySetMakeModel(display); - dispAsset.TryLinkAssetErrorToCommunication(display); + dispAsset.TrySetMakeModel(disp); + dispAsset.TryLinkAssetErrorToCommunication(disp); } } catch (Exception e) diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Fusion/EssentialsHuddleSpaceFusionSystemControllerBase.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Fusion/EssentialsHuddleSpaceFusionSystemControllerBase.cs index 9574743e..ff0c53ed 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Fusion/EssentialsHuddleSpaceFusionSystemControllerBase.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Fusion/EssentialsHuddleSpaceFusionSystemControllerBase.cs @@ -1676,20 +1676,46 @@ namespace PepperDash.Essentials.Core.Fusion public static FusionStaticAsset CreateStaticAsset(this FusionRoom fr, uint number, string name, string type, string instanceId) { - Debug.Console(0, "Adding Fusion Static Asset '{0}' to slot {1} with GUID: '{2}'", name, number, instanceId); + try + { + Debug.Console(0, "Adding Fusion Static Asset '{0}' to slot {1} with GUID: '{2}'", name, number, instanceId); - fr.AddAsset(eAssetType.StaticAsset, number, name, type, instanceId); - return fr.UserConfigurableAssetDetails[number].Asset as FusionStaticAsset; + fr.AddAsset(eAssetType.StaticAsset, number, name, type, instanceId); + return fr.UserConfigurableAssetDetails[number].Asset as FusionStaticAsset; + } + catch (InvalidOperationException ex) + { + Debug.Console(0, Debug.ErrorLogLevel.Notice, "Error creating Static Asset for device: '{0}'. Check that multiple devices don't have missing or duplicate uid properties in configuration. Error: {1}", name, ex); + return null; + } + catch (Exception e) + { + Debug.Console(2, "Error creating Static Asset: {0}", e); + return null; + } } public static FusionOccupancySensor CreateOccupancySensorAsset(this FusionRoom fr, uint number, string name, string type, string instanceId) { - Debug.Console(0, "Adding Fusion Occupancy Sensor Asset '{0}' to slot {1} with GUID: '{2}'", name, number, - instanceId); + try + { + Debug.Console(0, "Adding Fusion Occupancy Sensor Asset '{0}' to slot {1} with GUID: '{2}'", name, number, + instanceId); - fr.AddAsset(eAssetType.OccupancySensor, number, name, type, instanceId); - return fr.UserConfigurableAssetDetails[number].Asset as FusionOccupancySensor; + fr.AddAsset(eAssetType.OccupancySensor, number, name, type, instanceId); + return fr.UserConfigurableAssetDetails[number].Asset as FusionOccupancySensor; + } + catch (InvalidOperationException ex) + { + Debug.Console(0, Debug.ErrorLogLevel.Notice, "Error creating Static Asset for device: '{0}'. Check that multiple devices don't have missing or duplicate uid properties in configuration. Error: {1}", name, ex); + return null; + } + catch (Exception e) + { + Debug.Console(2, "Error creating Static Asset: {0}", e); + return null; + } } }