mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-16 13:15:03 +00:00
fix: resolved issue with default handlers, removed debug statements that were not accessed; fix: updated default handler, reportversions handler, devlist handler
This commit is contained in:
@@ -13,6 +13,7 @@ using PepperDash.Essentials.Core;
|
|||||||
using PepperDash.Essentials.Core.Bridges;
|
using PepperDash.Essentials.Core.Bridges;
|
||||||
using PepperDash.Essentials.Core.Config;
|
using PepperDash.Essentials.Core.Config;
|
||||||
using PepperDash.Essentials.Core.Fusion;
|
using PepperDash.Essentials.Core.Fusion;
|
||||||
|
using PepperDash.Essentials.Core.Web;
|
||||||
using PepperDash.Essentials.Devices.Common;
|
using PepperDash.Essentials.Devices.Common;
|
||||||
using PepperDash.Essentials.DM;
|
using PepperDash.Essentials.DM;
|
||||||
using PepperDash.Essentials.Fusion;
|
using PepperDash.Essentials.Fusion;
|
||||||
@@ -353,6 +354,7 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
// Build the processor wrapper class
|
// Build the processor wrapper class
|
||||||
DeviceManager.AddDevice(new PepperDash.Essentials.Core.Devices.CrestronProcessor("processor"));
|
DeviceManager.AddDevice(new PepperDash.Essentials.Core.Devices.CrestronProcessor("processor"));
|
||||||
|
DeviceManager.AddDevice(new EssemtialsWebApi("essentialsWebApi","Essentials Web API"));
|
||||||
|
|
||||||
// Add global System Monitor device
|
// Add global System Monitor device
|
||||||
if (CrestronEnvironment.DevicePlatform == eDevicePlatform.Appliance)
|
if (CrestronEnvironment.DevicePlatform == eDevicePlatform.Appliance)
|
||||||
|
|||||||
@@ -198,6 +198,7 @@
|
|||||||
<Compile Include="Crestron IO\Relay\ISwitchedOutput.cs" />
|
<Compile Include="Crestron IO\Relay\ISwitchedOutput.cs" />
|
||||||
<Compile Include="Crestron IO\StatusSign\StatusSignController.cs" />
|
<Compile Include="Crestron IO\StatusSign\StatusSignController.cs" />
|
||||||
<Compile Include="Web\RequestHandlers\AppDebugRequestHandler.cs" />
|
<Compile Include="Web\RequestHandlers\AppDebugRequestHandler.cs" />
|
||||||
|
<Compile Include="Web\RequestHandlers\DefaultRequestHandler.cs" />
|
||||||
<Compile Include="Web\RequestHandlers\DevListRequestHandler.cs" />
|
<Compile Include="Web\RequestHandlers\DevListRequestHandler.cs" />
|
||||||
<Compile Include="Web\RequestHandlers\DevPropsRequestHandler.cs" />
|
<Compile Include="Web\RequestHandlers\DevPropsRequestHandler.cs" />
|
||||||
<Compile Include="Web\RequestHandlers\DevJsonRequestHandler.cs" />
|
<Compile Include="Web\RequestHandlers\DevJsonRequestHandler.cs" />
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
using System.Collections.Generic;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using Crestron.SimplSharp;
|
using Crestron.SimplSharp;
|
||||||
using Crestron.SimplSharp.WebScripting;
|
using Crestron.SimplSharp.WebScripting;
|
||||||
|
using Crestron.SimplSharpPro.Diagnostics;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
using PepperDash.Core;
|
using PepperDash.Core;
|
||||||
using PepperDash.Core.Web;
|
using PepperDash.Core.Web;
|
||||||
using PepperDash.Essentials.Core.Web.RequestHandlers;
|
using PepperDash.Essentials.Core.Web.RequestHandlers;
|
||||||
@@ -11,11 +16,17 @@ namespace PepperDash.Essentials.Core.Web
|
|||||||
{
|
{
|
||||||
private readonly WebApiServer _server;
|
private readonly WebApiServer _server;
|
||||||
|
|
||||||
private const string DefaultBasePath = "/api";
|
///<example>
|
||||||
|
/// http(s)://{ipaddress}/cws/{basePath}
|
||||||
|
/// http(s)://{ipaddress}/VirtualControl/Rooms/{roomId}/cws/{basePath}
|
||||||
|
/// </example>
|
||||||
|
private readonly string _defaultBasePath =
|
||||||
|
CrestronEnvironment.DevicePlatform == eDevicePlatform.Appliance ? string.Format("/app{0:00}/api", InitialParametersClass.ApplicationNumber) : "/api";
|
||||||
|
|
||||||
|
// TODO [ ] Reset debug levels to proper value Trace = 0, Info = 1, Verbose = 2
|
||||||
private const int DebugTrace = 0;
|
private const int DebugTrace = 0;
|
||||||
private const int DebugInfo = 1;
|
private const int DebugInfo = 0;
|
||||||
private const int DebugVerbose = 2;
|
private const int DebugVerbose = 0;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// CWS base path
|
/// CWS base path
|
||||||
@@ -30,6 +41,16 @@ namespace PepperDash.Essentials.Core.Web
|
|||||||
get { return _server.IsRegistered; }
|
get { return _server.IsRegistered; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructor
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="key"></param>
|
||||||
|
/// <param name="name"></param>
|
||||||
|
public EssemtialsWebApi(string key, string name)
|
||||||
|
: this(key, name, null)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Constructor
|
/// Constructor
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -41,7 +62,10 @@ namespace PepperDash.Essentials.Core.Web
|
|||||||
{
|
{
|
||||||
Key = key;
|
Key = key;
|
||||||
|
|
||||||
BasePath = string.IsNullOrEmpty(config.BasePath) ? DefaultBasePath : config.BasePath;
|
if (config == null)
|
||||||
|
BasePath = _defaultBasePath;
|
||||||
|
else
|
||||||
|
BasePath = string.IsNullOrEmpty(config.BasePath) ? _defaultBasePath : config.BasePath;
|
||||||
|
|
||||||
_server = new WebApiServer(Key, Name, BasePath);
|
_server = new WebApiServer(Key, Name, BasePath);
|
||||||
}
|
}
|
||||||
@@ -116,9 +140,10 @@ namespace PepperDash.Essentials.Core.Web
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
foreach (var route in routes)
|
foreach (var route in routes.Where(route => route != null))
|
||||||
{
|
{
|
||||||
_server.AddRoute(route);
|
var r = route;
|
||||||
|
_server.AddRoute(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
return base.CustomActivate();
|
return base.CustomActivate();
|
||||||
@@ -145,17 +170,56 @@ namespace PepperDash.Essentials.Core.Web
|
|||||||
if (response.Contains("OFF")) return;
|
if (response.Contains("OFF")) return;
|
||||||
|
|
||||||
var is4Series = eCrestronSeries.Series4 == (Global.ProcessorSeries & eCrestronSeries.Series4);
|
var is4Series = eCrestronSeries.Series4 == (Global.ProcessorSeries & eCrestronSeries.Series4);
|
||||||
Debug.Console(DebugTrace, Debug.ErrorLogLevel.Notice, "Starting Essentials CWS on {0} Appliance", is4Series ? "4-series" : "3-series");
|
Debug.Console(DebugTrace, Debug.ErrorLogLevel.Notice, "Starting Essentials Web API on {0} Appliance", is4Series ? "4-series" : "3-series");
|
||||||
|
|
||||||
_server.Start();
|
_server.Start();
|
||||||
|
|
||||||
|
GetPaths();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Automatically start CWS when running on a server (Linux OS, Virtual Control)
|
// Automatically start CWS when running on a server (Linux OS, Virtual Control)
|
||||||
Debug.Console(DebugTrace, Debug.ErrorLogLevel.Notice, "Starting Essentials CWS on Virtual Control Server");
|
Debug.Console(DebugTrace, Debug.ErrorLogLevel.Notice, "Starting Essentials Web API on Virtual Control Server");
|
||||||
|
|
||||||
_server.Start();
|
_server.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Print the available pahts
|
||||||
|
/// </summary>
|
||||||
|
/// <example>
|
||||||
|
/// http(s)://{ipaddress}/cws/{basePath}
|
||||||
|
/// http(s)://{ipaddress}/VirtualControl/Rooms/{roomId}/cws/{basePath}
|
||||||
|
/// </example>
|
||||||
|
public void GetPaths()
|
||||||
|
{
|
||||||
|
Debug.Console(DebugTrace, this, "{0}", 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
|
||||||
|
? string.Format("http(s)://{0}/virtualcontrol/rooms/{1}/cws{2}", hostname, InitialParametersClass.RoomId, BasePath)
|
||||||
|
: string.Format("http(s)://{0}/cws{1}", currentIp, BasePath);
|
||||||
|
|
||||||
|
Debug.Console(DebugTrace, this, "Server:{0}", path);
|
||||||
|
|
||||||
|
var routeCollection = _server.GetRouteCollection();
|
||||||
|
if (routeCollection == null)
|
||||||
|
{
|
||||||
|
Debug.Console(DebugTrace, this, "Server route collection is null");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Debug.Console(DebugTrace, this, "Configured Routes:");
|
||||||
|
foreach (var route in routeCollection)
|
||||||
|
{
|
||||||
|
Debug.Console(DebugTrace, this, "{0}: {1}/{2}", route.Name, path, route.Url);
|
||||||
|
}
|
||||||
|
Debug.Console(DebugTrace, this, "{0}", new String('-', 50));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,112 @@
|
|||||||
|
using Crestron.SimplSharp.WebScripting;
|
||||||
|
using PepperDash.Core.Web.RequestHandlers;
|
||||||
|
|
||||||
|
namespace PepperDash.Essentials.Core.Web.RequestHandlers
|
||||||
|
{
|
||||||
|
public class DefaultRequestHandler : WebApiBaseRequestHandler
|
||||||
|
{
|
||||||
|
private const string Key = "DefaultRequestHandler";
|
||||||
|
private const uint Trace = 0;
|
||||||
|
private const uint Info = 1;
|
||||||
|
private const uint Verbose = 2;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Handles CONNECT method requests
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context"></param>
|
||||||
|
protected override void HandleConnect(HttpCwsContext context)
|
||||||
|
{
|
||||||
|
context.Response.StatusCode = 501;
|
||||||
|
context.Response.StatusDescription = "Not Implemented";
|
||||||
|
context.Response.End();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Handles DELETE method requests
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context"></param>
|
||||||
|
protected override void HandleDelete(HttpCwsContext context)
|
||||||
|
{
|
||||||
|
context.Response.StatusCode = 501;
|
||||||
|
context.Response.StatusDescription = "Not Implemented";
|
||||||
|
context.Response.End();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Handles GET method requests
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context"></param>
|
||||||
|
protected override void HandleGet(HttpCwsContext context)
|
||||||
|
{
|
||||||
|
context.Response.StatusCode = 501;
|
||||||
|
context.Response.StatusDescription = "Not Implemented";
|
||||||
|
context.Response.End();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Handles HEAD method requests
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context"></param>
|
||||||
|
protected override void HandleHead(HttpCwsContext context)
|
||||||
|
{
|
||||||
|
context.Response.StatusCode = 501;
|
||||||
|
context.Response.StatusDescription = "Not Implemented";
|
||||||
|
context.Response.End();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Handles OPTIONS method requests
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context"></param>
|
||||||
|
protected override void HandleOptions(HttpCwsContext context)
|
||||||
|
{
|
||||||
|
context.Response.StatusCode = 501;
|
||||||
|
context.Response.StatusDescription = "Not Implemented";
|
||||||
|
context.Response.End();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Handles PATCH method requests
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context"></param>
|
||||||
|
protected override void HandlePatch(HttpCwsContext context)
|
||||||
|
{
|
||||||
|
context.Response.StatusCode = 501;
|
||||||
|
context.Response.StatusDescription = "Not Implemented";
|
||||||
|
context.Response.End();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Handles POST method requests
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context"></param>
|
||||||
|
protected override void HandlePost(HttpCwsContext context)
|
||||||
|
{
|
||||||
|
context.Response.StatusCode = 501;
|
||||||
|
context.Response.StatusDescription = "Not Implemented";
|
||||||
|
context.Response.End();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Handles PUT method requests
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context"></param>
|
||||||
|
protected override void HandlePut(HttpCwsContext context)
|
||||||
|
{
|
||||||
|
context.Response.StatusCode = 501;
|
||||||
|
context.Response.StatusDescription = "Not Implemented";
|
||||||
|
context.Response.End();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Handles TRACE method requests
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context"></param>
|
||||||
|
protected override void HandleTrace(HttpCwsContext context)
|
||||||
|
{
|
||||||
|
context.Response.StatusCode = 501;
|
||||||
|
context.Response.StatusDescription = "Not Implemented";
|
||||||
|
context.Response.End();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,10 +1,20 @@
|
|||||||
using Crestron.SimplSharp.WebScripting;
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
|
using Crestron.SimplSharp.WebScripting;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using PepperDash.Core;
|
||||||
using PepperDash.Core.Web.RequestHandlers;
|
using PepperDash.Core.Web.RequestHandlers;
|
||||||
|
using Debug = PepperDash.Core.Debug;
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.Web.RequestHandlers
|
namespace PepperDash.Essentials.Core.Web.RequestHandlers
|
||||||
{
|
{
|
||||||
public class DevListRequestHandler : WebApiBaseRequestHandler
|
public class DevListRequestHandler : WebApiBaseRequestHandler
|
||||||
{
|
{
|
||||||
|
private const string Key = "DevListRequestHandler";
|
||||||
|
private const uint Trace = 0;
|
||||||
|
private const uint Info = 0;
|
||||||
|
private const uint Verbose = 0;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Handles CONNECT method requests
|
/// Handles CONNECT method requests
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -33,8 +43,31 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers
|
|||||||
/// <param name="context"></param>
|
/// <param name="context"></param>
|
||||||
protected override void HandleGet(HttpCwsContext context)
|
protected override void HandleGet(HttpCwsContext context)
|
||||||
{
|
{
|
||||||
context.Response.StatusCode = 501;
|
var allDevices = DeviceManager.AllDevices;
|
||||||
context.Response.StatusDescription = "Not Implemented";
|
allDevices.Sort((a, b) => System.String.Compare(a.Key, b.Key, System.StringComparison.Ordinal));
|
||||||
|
|
||||||
|
var devices = allDevices.Select(device => new
|
||||||
|
{
|
||||||
|
Key = device.Key,
|
||||||
|
Name = device is IKeyName ? (device as IKeyName).Name : "---"
|
||||||
|
|
||||||
|
}).Cast<object>().ToList();
|
||||||
|
|
||||||
|
var js = JsonConvert.SerializeObject(devices, Formatting.Indented, new JsonSerializerSettings
|
||||||
|
{
|
||||||
|
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
|
||||||
|
NullValueHandling = NullValueHandling.Ignore,
|
||||||
|
MissingMemberHandling = MissingMemberHandling.Ignore,
|
||||||
|
DefaultValueHandling = DefaultValueHandling.Ignore,
|
||||||
|
TypeNameHandling = TypeNameHandling.None
|
||||||
|
});
|
||||||
|
//Debug.Console(Verbose, "[{0}] HandleGet: \x0d\x0a{1}", Key.ToLower(), js);
|
||||||
|
|
||||||
|
context.Response.StatusCode = 200;
|
||||||
|
context.Response.StatusDescription = "OK";
|
||||||
|
context.Response.ContentType = "application/json";
|
||||||
|
context.Response.ContentEncoding = System.Text.Encoding.UTF8;
|
||||||
|
context.Response.Write(js, false);
|
||||||
context.Response.End();
|
context.Response.End();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,18 @@
|
|||||||
using Crestron.SimplSharp.WebScripting;
|
using System.Linq;
|
||||||
|
using Crestron.SimplSharp.WebScripting;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using PepperDash.Core;
|
||||||
using PepperDash.Core.Web.RequestHandlers;
|
using PepperDash.Core.Web.RequestHandlers;
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core.Web.RequestHandlers
|
namespace PepperDash.Essentials.Core.Web.RequestHandlers
|
||||||
{
|
{
|
||||||
public class ReportVersionsRequestHandler : WebApiBaseRequestHandler
|
public class ReportVersionsRequestHandler : WebApiBaseRequestHandler
|
||||||
{
|
{
|
||||||
|
private const string Key = "ReportVersionsRequestHandler";
|
||||||
|
private const uint Trace = 0;
|
||||||
|
private const uint Info = 0;
|
||||||
|
private const uint Verbose = 0;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Handles CONNECT method requests
|
/// Handles CONNECT method requests
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -33,8 +41,27 @@ namespace PepperDash.Essentials.Core.Web.RequestHandlers
|
|||||||
/// <param name="context"></param>
|
/// <param name="context"></param>
|
||||||
protected override void HandleGet(HttpCwsContext context)
|
protected override void HandleGet(HttpCwsContext context)
|
||||||
{
|
{
|
||||||
context.Response.StatusCode = 501;
|
var assemblies = PluginLoader.LoadedAssemblies.Select(assembly => new
|
||||||
context.Response.StatusDescription = "Not Implemented";
|
{
|
||||||
|
Name = assembly.Name,
|
||||||
|
Version = assembly.Version
|
||||||
|
}).Cast<object>().ToList();
|
||||||
|
|
||||||
|
var js = JsonConvert.SerializeObject(assemblies, Formatting.Indented, new JsonSerializerSettings
|
||||||
|
{
|
||||||
|
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
|
||||||
|
NullValueHandling = NullValueHandling.Ignore,
|
||||||
|
MissingMemberHandling = MissingMemberHandling.Ignore,
|
||||||
|
DefaultValueHandling = DefaultValueHandling.Ignore,
|
||||||
|
TypeNameHandling = TypeNameHandling.None
|
||||||
|
});
|
||||||
|
//Debug.Console(Verbose, "[{0}] HandleGet: \x0d\x0a{1}", Key.ToLower(), js);
|
||||||
|
|
||||||
|
context.Response.StatusCode = 200;
|
||||||
|
context.Response.StatusDescription = "OK";
|
||||||
|
context.Response.ContentType = "application/json";
|
||||||
|
context.Response.ContentEncoding = System.Text.Encoding.UTF8;
|
||||||
|
context.Response.Write(js, false);
|
||||||
context.Response.End();
|
context.Response.End();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user