diff --git a/src/PepperDash.Essentials.Core/Devices/DeviceJsonApi.cs b/src/PepperDash.Essentials.Core/Devices/DeviceJsonApi.cs index 4fd97f22..816251ba 100644 --- a/src/PepperDash.Essentials.Core/Devices/DeviceJsonApi.cs +++ b/src/PepperDash.Essentials.Core/Devices/DeviceJsonApi.cs @@ -1,5 +1,3 @@ - - using Crestron.SimplSharp; using Newtonsoft.Json; using PepperDash.Core; @@ -11,7 +9,6 @@ using System.Linq; using System.Reflection; using System.Threading.Tasks; - namespace PepperDash.Essentials.Core { public class DeviceJsonApi @@ -141,18 +138,26 @@ namespace PepperDash.Essentials.Core .Select((p, i) => ConvertType(action.Params[i], p.ParameterType)) .ToArray(); - await Task.Run(() => + try { - try + Debug.LogMessage(LogEventLevel.Verbose, "Calling method {methodName} on device {deviceKey} with {@params}", null, method.Name, action.DeviceKey, action.Params); + var result = method.Invoke(obj, convertedParams); + + // If the method returns a Task, await it + if (result is Task task) { - Debug.LogMessage(LogEventLevel.Verbose, "Calling method {methodName} on device {deviceKey} with {@params}", null, method.Name, action.DeviceKey, action.Params); - method.Invoke(obj, convertedParams); + await task; } - catch (Exception e) + // If the method returns a Task, await it + else if (result != null && result.GetType().IsGenericType && result.GetType().GetGenericTypeDefinition() == typeof(Task<>)) { - Debug.LogMessage(e, "Error invoking method {methodName} on device {deviceKey}", null, method.Name, action.DeviceKey); + await (Task)result; } - }); + } + catch (Exception e) + { + Debug.LogMessage(e, "Error invoking method {methodName} on device {deviceKey}", null, method.Name, action.DeviceKey); + } } catch (Exception ex) { diff --git a/src/PepperDash.Essentials.Core/Room/Combining/RoomCombinationScenario.cs b/src/PepperDash.Essentials.Core/Room/Combining/RoomCombinationScenario.cs index f36b807c..b0b338ec 100644 --- a/src/PepperDash.Essentials.Core/Room/Combining/RoomCombinationScenario.cs +++ b/src/PepperDash.Essentials.Core/Room/Combining/RoomCombinationScenario.cs @@ -81,12 +81,10 @@ namespace PepperDash.Essentials.Core foreach (var action in activationActions) { this.LogInformation("Running Activation action {@action}", action); - tasks.Add(DeviceJsonApi.DoDeviceActionAsync(action)); + await DeviceJsonApi.DoDeviceActionAsync(action); } } - await Task.WhenAll(tasks); - IsActive = true; } @@ -101,12 +99,10 @@ namespace PepperDash.Essentials.Core foreach (var action in deactivationActions) { this.LogInformation("Running deactivation action {actionDeviceKey}:{actionMethod}", action.DeviceKey, action.MethodName); - tasks.Add( DeviceJsonApi.DoDeviceActionAsync(action)); + await DeviceJsonApi.DoDeviceActionAsync(action); } } - await Task.WhenAll(tasks); - IsActive = false; }