Merge 'development-2.0.0' into 'feature-2.0.0/fix-version-info'

This commit is contained in:
Neil Dorin
2024-05-29 12:10:34 -06:00
81 changed files with 1905 additions and 1035 deletions

View File

@@ -89,7 +89,7 @@ namespace PepperDash.Essentials.Core.Web
Name = "DevList",
RouteHandler = new DevListRequestHandler()
},
new HttpCwsRoute("deviceCommands")
new HttpCwsRoute("deviceCommands/{deviceKey}")
{
Name = "DevJson",
RouteHandler = new DevJsonRequestHandler()
@@ -163,6 +163,11 @@ namespace PepperDash.Essentials.Core.Web
{
Name = "Load Config",
RouteHandler = new LoadConfigRequestHandler()
},
new HttpCwsRoute("getTielines")
{
Name = "Get TieLines",
RouteHandler = new GetTieLinesRequestHandler()
}
};
@@ -233,32 +238,32 @@ namespace PepperDash.Essentials.Core.Web
/// </example>
public void GetPaths()
{
Debug.LogMessage(LogEventLevel.Verbose, this, "{0}", new String('-', 50));
Debug.LogMessage(LogEventLevel.Information, this, new string('-', 50));
var currentIp = CrestronEthernetHelper.GetEthernetParameter(
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_ADDRESS, 0);
var hostname = CrestronEthernetHelper.GetEthernetParameter(
CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_HOSTNAME, 0);
var path = CrestronEnvironment.DevicePlatform == eDevicePlatform.Server
? $"http(s)://{hostname}/VirtualControl/Rooms/{InitialParametersClass.RoomId}/cws{BasePath}"
: $"http(s)://{currentIp}/cws{BasePath}";
var path = CrestronEnvironment.DevicePlatform == eDevicePlatform.Server
? string.Format("http(s)://{0}/VirtualControl/Rooms/{1}/cws{2}", hostname, InitialParametersClass.RoomId, BasePath)
: string.Format("http(s)://{0}/cws{1}", currentIp, BasePath);
Debug.LogMessage(LogEventLevel.Verbose, this, "Server:{0}", path);
Debug.LogMessage(LogEventLevel.Information, this, "Server:{path:l}", path);
var routeCollection = _server.GetRouteCollection();
if (routeCollection == null)
{
Debug.LogMessage(LogEventLevel.Verbose, this, "Server route collection is null");
Debug.LogMessage(LogEventLevel.Information, this, "Server route collection is null");
return;
}
Debug.LogMessage(LogEventLevel.Verbose, this, "Configured Routes:");
Debug.LogMessage(LogEventLevel.Information, this, "Configured Routes:");
foreach (var route in routeCollection)
{
Debug.LogMessage(LogEventLevel.Verbose, this, "{0}: {1}/{2}", route.Name, path, route.Url);
Debug.LogMessage(LogEventLevel.Information, this, "{routeName:l}: {routePath:l}/{routeUrl:l}", route.Name, path, route.Url);
}
Debug.LogMessage(LogEventLevel.Verbose, this, "{0}", new String('-', 50));
Debug.LogMessage(LogEventLevel.Information, this, new string('-', 50));
}
}
}

View File

@@ -7,11 +7,11 @@ using PepperDash.Core;
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);
@@ -22,8 +22,8 @@ namespace PepperDash.Essentials.Core.Web
{
return new
{
Name = assembly.Name,
Version = assembly.Version
assembly.Name,
assembly.Version
};
}
@@ -31,7 +31,7 @@ namespace PepperDash.Essentials.Core.Web
{
return new
{
Key = device.Key,
device.Key,
Name = (device is IKeyName)
? (device as IKeyName).Name
: "---"

View File

@@ -52,7 +52,7 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers
return;
}
var data = EssentialsWebApiHelpers.GetRequestBody(context.Request);
var data = context.Request.GetRequestBody();
if (string.IsNullOrEmpty(data))
{
context.Response.StatusCode = 400;

View File

@@ -1,5 +1,6 @@
using System;
using Crestron.SimplSharp.WebScripting;
using Newtonsoft.Json;
using PepperDash.Core;
using PepperDash.Core.Web.RequestHandlers;
using Serilog.Events;
@@ -25,28 +26,55 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers
/// <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;
context.Response.StatusDescription = "Bad Request";
context.Response.StatusDescription = "Bad Request: no body";
context.Response.End();
return;
}
var data = EssentialsWebApiHelpers.GetRequestBody(context.Request);
var data = context.Request.GetRequestBody();
if (string.IsNullOrEmpty(data))
{
context.Response.StatusCode = 400;
context.Response.StatusDescription = "Bad Request";
context.Response.StatusDescription = "Bad Request: no body";
context.Response.End();
return;
}
try
{
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";
@@ -54,12 +82,11 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers
}
catch (Exception ex)
{
Debug.LogMessage(LogEventLevel.Error, "Exception Message: {0}", ex.Message);
Debug.LogMessage(LogEventLevel.Verbose, "Exception Stack Trace: {0}", ex.StackTrace);
if(ex.InnerException != null) Debug.LogMessage(LogEventLevel.Error, "Exception Inner: {0}", ex.InnerException);
Debug.LogMessage(ex, "Error handling device command: {Exception}");
context.Response.StatusCode = 400;
context.Response.StatusDescription = "Bad Request";
context.Response.Write(JsonConvert.SerializeObject(new { error = ex.Message }), false);
context.Response.End();
}
}

View File

@@ -34,7 +34,7 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers
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();

View File

@@ -1,6 +1,7 @@
using System.Text;
using Crestron.SimplSharp.WebScripting;
using Newtonsoft.Json;
using PepperDash.Core;
using PepperDash.Core.Web.RequestHandlers;
namespace PepperDash.Essentials.Core.Web.RequestHandlers
@@ -25,6 +26,7 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers
protected override void HandleGet(HttpCwsContext context)
{
var routeData = context.Request.RouteData;
Debug.LogMessage(Serilog.Events.LogEventLevel.Debug, "Getting DevMethods: {@routeData}", routeData);
if (routeData == null)
{
context.Response.StatusCode = 400;

View File

@@ -52,7 +52,7 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers
return;
}
var data = EssentialsWebApiHelpers.GetRequestBody(context.Request);
var data = context.Request.GetRequestBody();
if (string.IsNullOrEmpty(data))
{
context.Response.StatusCode = 400;

View File

@@ -0,0 +1,34 @@
using Crestron.SimplSharp.WebScripting;
using Newtonsoft.Json;
using PepperDash.Core.Web.RequestHandlers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PepperDash.Essentials.Core.Web.RequestHandlers
{
public class GetTieLinesRequestHandler:WebApiBaseRequestHandler
{
public GetTieLinesRequestHandler() : base(true) { }
protected override void HandleGet(HttpCwsContext context)
{
var tieLineString = JsonConvert.SerializeObject(TieLineCollection.Default.Select((tl) => new {
sourceKey = tl.SourcePort.ParentDevice.Key,
sourcePort = tl.SourcePort.Key,
destinationKey = tl.DestinationPort.ParentDevice.Key,
destinationPort = tl.DestinationPort.Key
}));
context.Response.StatusCode = 200;
context.Response.StatusDescription = "OK";
context.Response.ContentType = "application/json";
context.Response.ContentEncoding = Encoding.UTF8;
context.Response.Write(tieLineString, false);
context.Response.End();
}
}
}

View File

@@ -89,7 +89,7 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers
return;
}
var data = EssentialsWebApiHelpers.GetRequestBody(context.Request);
var data = context.Request.GetRequestBody();
if (data == null)
{
context.Response.StatusCode = 500;