Skip to content

Commit

Permalink
Merge pull request #1190 from PepperDash/feature-2.0.0/routing-updates
Browse files Browse the repository at this point in the history
Updates after testing
  • Loading branch information
ndorin committed May 24, 2024
2 parents 1ebee58 + f630d3f commit a8c36ba
Show file tree
Hide file tree
Showing 14 changed files with 76 additions and 52 deletions.
19 changes: 4 additions & 15 deletions src/PepperDash.Essentials.Core/Factory/DeviceFactory.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@


using Crestron.SimplSharp;
using Crestron.SimplSharp.Reflection;
using System.Reflection;
using Newtonsoft.Json.Linq;
using PepperDash.Core;
using PepperDash.Essentials.Core.Config;
Expand All @@ -14,7 +14,7 @@ namespace PepperDash.Essentials.Core
{
public class DeviceFactoryWrapper
{
public CType CType { get; set; }
public Type CType { get; set; }
public string Description { get; set; }
public Func<DeviceConfig, IKeyed> FactoryMethod { get; set; }

Expand Down Expand Up @@ -69,7 +69,7 @@ public static void AddFactoryForType(string typeName, Func<DeviceConfig, IKeyed>
DeviceFactory.FactoryMethods.Add(typeName, new DeviceFactoryWrapper() { FactoryMethod = method});
}

public static void AddFactoryForType(string typeName, string description, CType cType, Func<DeviceConfig, IKeyed> method)
public static void AddFactoryForType(string typeName, string description, Type cType, Func<DeviceConfig, IKeyed> method)
{
//Debug.LogMessage(LogEventLevel.Debug, "Adding factory method for type '{0}'", typeName);

Expand Down Expand Up @@ -149,18 +149,7 @@ public static IKeyed GetDevice(DeviceConfig dc)
}
catch (Exception ex)
{
Debug.LogMessage(LogEventLevel.Error, "Exception occurred while creating device {0}: {1}", dc.Key, ex.Message);

Debug.LogMessage(LogEventLevel.Verbose, "{0}", ex.StackTrace);

if (ex.InnerException == null)
{
return null;
}

Debug.LogMessage(LogEventLevel.Error, "Inner exception while creating device {0}: {1}", dc.Key,
ex.InnerException.Message);
Debug.LogMessage(LogEventLevel.Verbose, "{0}", ex.InnerException.StackTrace);
Debug.LogMessage(ex, "Exception occurred while creating device {0}: {1}", null, dc.Key, ex.Message);
return null;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@

using Crestron.SimplSharp.Reflection;
using System.Reflection;
using PepperDash.Core;
using PepperDash.Essentials.Core.Config;
using Serilog.Events;
Expand Down Expand Up @@ -55,7 +55,7 @@ public static void AddFactoryForType(string extensionName, Func<DeviceConfig, IK
ProcessorExtensionDeviceFactory.ProcessorExtensionFactoryMethods.Add(extensionName, new DeviceFactoryWrapper() { FactoryMethod = method });
}

public static void AddFactoryForType(string extensionName, string description, CType cType, Func<DeviceConfig, IKeyed> method)
public static void AddFactoryForType(string extensionName, string description, Type cType, Func<DeviceConfig, IKeyed> method)
{
//Debug.LogMessage(LogEventLevel.Debug, "Adding factory method for type '{0}'", typeName);

Expand Down
39 changes: 23 additions & 16 deletions src/PepperDash.Essentials.Core/Plugins/PluginLoader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
using System.Text;
using Crestron.SimplSharp;
using Crestron.SimplSharp.CrestronIO;
using Crestron.SimplSharp.Reflection;
using System.Reflection;

using PepperDash.Core;
using PepperDash.Essentials.Core;
Expand Down Expand Up @@ -119,24 +119,31 @@ public static void SetEssentialsAssembly(string name, Assembly assembly)
/// <param name="fileName"></param>
static LoadedAssembly LoadAssembly(string filePath)
{
//Debug.LogMessage(LogEventLevel.Verbose, "Attempting to load {0}", filePath);
var assembly = Assembly.LoadFrom(filePath);
if (assembly != null)
try
{
var assyVersion = GetAssemblyVersion(assembly);
//Debug.LogMessage(LogEventLevel.Verbose, "Attempting to load {0}", filePath);
var assembly = Assembly.LoadFrom(filePath);
if (assembly != null)
{
var assyVersion = GetAssemblyVersion(assembly);

var loadedAssembly = new LoadedAssembly(assembly.GetName().Name, assyVersion, assembly);
LoadedAssemblies.Add(loadedAssembly);
Debug.LogMessage(LogEventLevel.Information, "Loaded assembly '{0}', version {1}", loadedAssembly.Name, loadedAssembly.Version);
return loadedAssembly;
}
else
var loadedAssembly = new LoadedAssembly(assembly.GetName().Name, assyVersion, assembly);
LoadedAssemblies.Add(loadedAssembly);
Debug.LogMessage(LogEventLevel.Information, "Loaded assembly '{0}', version {1}", loadedAssembly.Name, loadedAssembly.Version);
return loadedAssembly;
}
else
{
Debug.LogMessage(LogEventLevel.Information, "Unable to load assembly: '{0}'", filePath);
}

return null;
} catch(Exception ex)
{
Debug.LogMessage(LogEventLevel.Information, "Unable to load assembly: '{0}'", filePath);
Debug.LogMessage(ex, "Error loading assembly from {path}", null, filePath);
return null;
}

return null;

}

/// <summary>
Expand Down Expand Up @@ -354,7 +361,7 @@ static void LoadCustomPluginTypes()
try
{
var assy = loadedAssembly.Assembly;
CType[] types = {};
Type[] types = {};
try
{
types = assy.GetTypes();
Expand Down Expand Up @@ -439,7 +446,7 @@ static void LoadCustomPlugin(IPluginDeviceFactory plugin, LoadedAssembly loadedA
/// </summary>
/// <param name="type"></param>
/// <param name="loadPlugin"></param>
static void LoadCustomLegacyPlugin(CType type, MethodInfo loadPlugin, LoadedAssembly loadedAssembly)
static void LoadCustomLegacyPlugin(Type type, MethodInfo loadPlugin, LoadedAssembly loadedAssembly)
{
Debug.LogMessage(LogEventLevel.Verbose, "LoadPlugin method found in {0}", type.Name);

Expand Down
2 changes: 1 addition & 1 deletion src/PepperDash.Essentials.Core/Web/EssentialsWebApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ private void SetupRoutes()
Name = "DevList",
RouteHandler = new DevListRequestHandler()
},
new HttpCwsRoute("deviceCommands")
new HttpCwsRoute("deviceCommands/{deviceKey}")
{
Name = "DevJson",
RouteHandler = new DevJsonRequestHandler()
Expand Down
12 changes: 6 additions & 6 deletions src/PepperDash.Essentials.Core/Web/EssentialsWebApiHelpers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@

namespace PepperDash.Essentials.Core.Web
{
public class EssentialsWebApiHelpers
public static class EssentialsWebApiHelpers
{
public static string GetRequestBody(HttpCwsRequest request)
public static string GetRequestBody(this HttpCwsRequest request)
{
var bytes = new Byte[request.ContentLength];
var bytes = new byte[request.ContentLength];

request.InputStream.Read(bytes, 0, request.ContentLength);

Expand All @@ -22,16 +22,16 @@ public static object MapToAssemblyObject(LoadedAssembly assembly)
{
return new
{
Name = assembly.Name,
Version = assembly.Version
assembly.Name,
assembly.Version
};
}

public static object MapToDeviceListObject(IKeyed device)
{
return new
{
Key = device.Key,
device.Key,
Name = (device is IKeyName)
? (device as IKeyName).Name
: "---"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ protected override void HandlePost(HttpCwsContext context)
return;
}

var data = EssentialsWebApiHelpers.GetRequestBody(context.Request);
var data = context.Request.GetRequestBody();
if (string.IsNullOrEmpty(data))
{
context.Response.StatusCode = 400;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,26 @@ public DevJsonRequestHandler()
/// <param name="context"></param>
protected override void HandlePost(HttpCwsContext context)
{
var routeData = context.Request.RouteData;

if(routeData == null)
{
context.Response.StatusCode = 400;
context.Response.StatusDescription = "Bad Request";
context.Response.End();

return;
}

if(!routeData.Values.TryGetValue("deviceKey", out var deviceKey))
{
context.Response.StatusCode = 400;
context.Response.StatusDescription = "Bad Request";
context.Response.End();

return;
}

if (context.Request.ContentLength < 0)
{
context.Response.StatusCode = 400;
Expand All @@ -35,7 +55,8 @@ protected override void HandlePost(HttpCwsContext context)
return;
}

var data = EssentialsWebApiHelpers.GetRequestBody(context.Request);
var data = context.Request.GetRequestBody();

if (string.IsNullOrEmpty(data))
{
context.Response.StatusCode = 400;
Expand All @@ -46,9 +67,14 @@ protected override void HandlePost(HttpCwsContext context)
}

try
{
var daw = JsonConvert.DeserializeObject<DeviceActionWrapper>(data);
DeviceJsonApi.DoDeviceActionWithJson(data);
{
var daw = new DeviceActionWrapper { DeviceKey = (string) deviceKey};

JsonConvert.PopulateObject(data, daw);

Debug.LogMessage(LogEventLevel.Verbose, "Device Action Wrapper: {@wrapper}", null, daw);

DeviceJsonApi.DoDeviceAction(daw);

context.Response.StatusCode = 200;
context.Response.StatusDescription = "OK";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ protected override void HandleGet(HttpCwsContext context)
return;
}

allDevices.Sort((a, b) => System.String.Compare(a.Key, b.Key, System.StringComparison.Ordinal));
allDevices.Sort((a, b) => string.Compare(a.Key, b.Key, System.StringComparison.Ordinal));

var deviceList = allDevices.Select(d => EssentialsWebApiHelpers.MapToDeviceListObject(d)).ToList();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ protected override void HandlePost(HttpCwsContext context)
return;
}

var data = EssentialsWebApiHelpers.GetRequestBody(context.Request);
var data = context.Request.GetRequestBody();
if (string.IsNullOrEmpty(data))
{
context.Response.StatusCode = 400;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ protected override void HandlePost(HttpCwsContext context)
return;
}

var data = EssentialsWebApiHelpers.GetRequestBody(context.Request);
var data = context.Request.GetRequestBody();
if (data == null)
{
context.Response.StatusCode = 500;
Expand Down
2 changes: 1 addition & 1 deletion src/PepperDash.Essentials.Devices.Common/DeviceFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

using System;
using System.Linq;
using Crestron.SimplSharp.Reflection;
using System.Reflection;
using PepperDash.Core;
using PepperDash.Essentials.Core;
using Serilog.Events;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ public RoutingInputPort CurrentInputPort

protected set
{
if (_currentInputPort == value) return;

_currentInputPort = value;

InputChanged?.Invoke(this, _currentInputPort);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

namespace PepperDash.Essentials.Devices.Common.Displays
{
public class MockDisplay : TwoWayDisplayBase, IBasicVolumeWithFeedback, IBridgeAdvanced, IHasInputs<string, string>
public class MockDisplay : TwoWayDisplayBase, IBasicVolumeWithFeedback, IBridgeAdvanced, IHasInputs<string, string>, IRoutingSinkWithSwitchingWithInputPort, IHasPowerControlWithFeedback
{
public ISelectableItems<string> Inputs { get; private set; }

Expand Down Expand Up @@ -79,7 +79,7 @@ public MockDisplay(string key, string name)
eRoutingPortConnectionType.Hdmi, "HDMI2", this);
var hdmiIn3 = new RoutingInputPort(RoutingPortNames.HdmiIn3, eRoutingSignalType.AudioVideo,
eRoutingPortConnectionType.Hdmi, "HDMI3", this);
var hdmiIn4 = new RoutingInputPort(RoutingPortNames.ComponentIn, eRoutingSignalType.AudioVideo,
var hdmiIn4 = new RoutingInputPort(RoutingPortNames.HdmiIn4, eRoutingSignalType.AudioVideo,
eRoutingPortConnectionType.Hdmi, "HDMI4", this);
var dpIn = new RoutingInputPort(RoutingPortNames.DisplayPortIn, eRoutingSignalType.AudioVideo,
eRoutingPortConnectionType.DisplayPort, "DP", this);
Expand Down
2 changes: 1 addition & 1 deletion src/PepperDash.Essentials/Factory/DeviceFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
using Crestron.SimplSharp;
using Crestron.SimplSharp.CrestronIO;
using Crestron.SimplSharpPro;
using Crestron.SimplSharp.Reflection;
using System.Reflection;

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
Expand Down

0 comments on commit a8c36ba

Please sign in to comment.