diff --git a/Pepperdash Core/Pepperdash Core/Web/RequestHandlers/DefaultRequestRequestHandler.cs b/Pepperdash Core/Pepperdash Core/Web/RequestHandlers/DefaultRequestRequestHandler.cs index e7545df..9db866e 100644 --- a/Pepperdash Core/Pepperdash Core/Web/RequestHandlers/DefaultRequestRequestHandler.cs +++ b/Pepperdash Core/Pepperdash Core/Web/RequestHandlers/DefaultRequestRequestHandler.cs @@ -14,7 +14,7 @@ namespace PepperDash.Core.Web.RequestHandlers protected override void HandleConnect(HttpCwsContext context) { context.Response.StatusCode = 501; - context.Response.StatusDescription = "Not Implemented"; + context.Response.StatusDescription = "Not Implemented"; context.Response.End(); } diff --git a/Pepperdash Core/Pepperdash Core/Web/WebApiServer.cs b/Pepperdash Core/Pepperdash Core/Web/WebApiServer.cs index a3a30c0..43efb5b 100644 --- a/Pepperdash Core/Pepperdash Core/Web/WebApiServer.cs +++ b/Pepperdash Core/Pepperdash Core/Web/WebApiServer.cs @@ -1,6 +1,10 @@ using System; +using System.Collections.Generic; +using System.Linq; using Crestron.SimplSharp; using Crestron.SimplSharp.WebScripting; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using PepperDash.Core.Web.RequestHandlers; namespace PepperDash.Core.Web @@ -18,8 +22,8 @@ namespace PepperDash.Core.Web private const uint DebugInfo = 1; private const uint DebugVerbose = 2; - private HttpCwsServer _server; private readonly CCriticalSection _serverLock = new CCriticalSection(); + private HttpCwsServer _server; /// /// Web API server key @@ -41,6 +45,28 @@ namespace PepperDash.Core.Web /// public bool IsRegistered { get; private set; } + /// + /// Http request handler + /// + //public IHttpCwsHandler HttpRequestHandler + //{ + // get { return _server.HttpRequestHandler; } + // set + // { + // if (_server == null) return; + // _server.HttpRequestHandler = value; + // } + //} + + /// + /// Received request event handler + /// + //public event EventHandler ReceivedRequestEvent + //{ + // add { _server.ReceivedRequestEvent += new HttpCwsRequestEventHandler(value); } + // remove { _server.ReceivedRequestEvent -= new HttpCwsRequestEventHandler(value); } + //} + /// /// Constructor for S+. Make sure to set necessary properties using init method /// @@ -60,12 +86,12 @@ namespace PepperDash.Core.Web } /// - /// + /// Constructor /// /// /// /// - public WebApiServer(string key, string name, string basePath) + public WebApiServer(string key, string name, string basePath) { Key = key; Name = string.IsNullOrEmpty(name) ? DefaultName : name; @@ -73,6 +99,9 @@ namespace PepperDash.Core.Web if (_server == null) _server = new HttpCwsServer(BasePath); + _server.setProcessName(Key); + _server.HttpRequestHandler = new DefaultRequestRequestHandler(); + CrestronEnvironment.ProgramStatusEventHandler += CrestronEnvironment_ProgramStatusEventHandler; CrestronEnvironment.EthernetEventHandler += CrestronEnvironment_EthernetEventHandler; } @@ -85,7 +114,7 @@ namespace PepperDash.Core.Web { if (programEventType != eProgramStatusEventType.Stopping) return; - Debug.Console(DebugInfo, this, "Program stopping. Disabling Server"); + Debug.Console(DebugInfo, this, "Program stopping. stopping server"); Stop(); } @@ -147,6 +176,14 @@ namespace PepperDash.Core.Web _server.Routes.Remove(route); } + /// + /// Returns a list of the current routes + /// + public HttpCwsRouteCollection GetRouteCollection() + { + return _server.Routes; + } + /// /// Starts CWS instance /// @@ -168,9 +205,9 @@ namespace PepperDash.Core.Web return; } - Debug.Console(DebugInfo, this, "Starting server"); - IsRegistered = _server.Register(); + + Debug.Console(DebugInfo, this, "Starting server, registration {0}", IsRegistered ? "was successful" : "failed"); } catch (Exception ex) { @@ -201,6 +238,9 @@ namespace PepperDash.Core.Web } IsRegistered = _server.Unregister() == false; + + Debug.Console(DebugInfo, this, "Stopping server, unregistration {0}", IsRegistered ? "failed" : "was successful"); + _server.Dispose(); _server = null; } @@ -229,27 +269,8 @@ namespace PepperDash.Core.Web { try { - Debug.Console(DebugInfo, this, @"RecieveRequestEventHandler -Method: {0} -Path: {1} -PathInfo: {2} -PhysicalPath: {3} -ContentType: {4} -RawUrl: {5} -Url: {6} -UserAgent: {7} -UserHostAddress: {8} -UserHostName: {9}", - args.Context.Request.HttpMethod, - args.Context.Request.Path, - args.Context.Request.PathInfo, - args.Context.Request.PhysicalPath, - args.Context.Request.ContentType, - args.Context.Request.RawUrl, - args.Context.Request.Url, - args.Context.Request.UserAgent, - args.Context.Request.UserHostAddress, - args.Context.Request.UserHostName); + var j = JsonConvert.SerializeObject(args.Context, Formatting.Indented); + Debug.Console(DebugVerbose, this, "RecieveRequestEventHandler Context:\x0d\x0a{0}", j); } catch (Exception ex) {