From 43a9661e08d7fc52d4c4b06e1ec6cb21be580a46 Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Mon, 23 Mar 2026 11:20:44 -0600 Subject: [PATCH] Refactor: Removing unused classes that reference Crestron HTTP classes - Removed the HttpLogoServer class and its related functionality from ControlSystem. - Updated ControlSystem to eliminate references to the logo server, including initialization and device checks. - Cleaned up unused variables and methods related to logo server handling. --- src/PepperDash.Core/WebApi/Presets/Preset.cs | 86 -- src/PepperDash.Core/WebApi/Presets/User.cs | 92 -- .../WebApi/Presets/WebApiPasscodeClient.cs | 280 ------ .../Config/Essentials/ConfigUpdater.cs | 259 ----- src/PepperDash.Essentials/ClassDiagram1.cd | 881 ------------------ src/PepperDash.Essentials/ControlSystem.cs | 79 +- src/PepperDash.Essentials/HttpLogoServer.cs | 123 --- 7 files changed, 7 insertions(+), 1793 deletions(-) delete mode 100644 src/PepperDash.Core/WebApi/Presets/Preset.cs delete mode 100644 src/PepperDash.Core/WebApi/Presets/User.cs delete mode 100644 src/PepperDash.Core/WebApi/Presets/WebApiPasscodeClient.cs delete mode 100644 src/PepperDash.Essentials.Core/Config/Essentials/ConfigUpdater.cs delete mode 100644 src/PepperDash.Essentials/ClassDiagram1.cd delete mode 100644 src/PepperDash.Essentials/HttpLogoServer.cs diff --git a/src/PepperDash.Core/WebApi/Presets/Preset.cs b/src/PepperDash.Core/WebApi/Presets/Preset.cs deleted file mode 100644 index 8d174b78..00000000 --- a/src/PepperDash.Core/WebApi/Presets/Preset.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; - -namespace PepperDash.Core.WebApi.Presets; - -/// -/// Represents a preset -/// - public class Preset - { - /// - /// ID of preset - /// - public int Id { get; set; } - - /// - /// User ID - /// - public int UserId { get; set; } - - /// - /// Room Type ID - /// - public int RoomTypeId { get; set; } - - /// - /// Preset Name - /// - public string PresetName { get; set; } - - /// - /// Preset Number - /// - public int PresetNumber { get; set; } - - /// - /// Preset Data - /// - public string Data { get; set; } - - /// - /// Constructor - /// - public Preset() - { - PresetName = ""; - PresetNumber = 1; - Data = "{}"; - } - } - - /// - /// Represents a PresetReceivedEventArgs - /// - public class PresetReceivedEventArgs : EventArgs - { - /// - /// True when the preset is found - /// - public bool LookupSuccess { get; private set; } - - /// - /// S+ helper - /// - public ushort ULookupSuccess { get { return (ushort)(LookupSuccess ? 1 : 0); } } - - /// - /// The preset - /// - public Preset Preset { get; private set; } - - /// - /// For Simpl+ - /// - public PresetReceivedEventArgs() { } - - /// - /// Constructor - /// - /// - /// - public PresetReceivedEventArgs(Preset preset, bool success) - { - LookupSuccess = success; - Preset = preset; - } - } \ No newline at end of file diff --git a/src/PepperDash.Core/WebApi/Presets/User.cs b/src/PepperDash.Core/WebApi/Presets/User.cs deleted file mode 100644 index a20803e4..00000000 --- a/src/PepperDash.Core/WebApi/Presets/User.cs +++ /dev/null @@ -1,92 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Core.WebApi.Presets; - - /// - /// - /// - public class User - { - /// - /// - /// - public int Id { get; set; } - - /// - /// - /// - public string ExternalId { get; set; } - - /// - /// - /// - public string FirstName { get; set; } - - /// - /// - /// - public string LastName { get; set; } - } - - - /// - /// - /// - public class UserReceivedEventArgs : EventArgs - { - /// - /// True when user is found - /// - public bool LookupSuccess { get; private set; } - - /// - /// For stupid S+ - /// - public ushort ULookupSuccess { get { return (ushort)(LookupSuccess ? 1 : 0); } } - - /// - /// - /// - public User User { get; private set; } - - /// - /// For Simpl+ - /// - public UserReceivedEventArgs() { } - - /// - /// Constructor - /// - /// - /// - public UserReceivedEventArgs(User user, bool success) - { - LookupSuccess = success; - User = user; - } - } - - /// - /// Represents a UserAndRoomMessage - /// - public class UserAndRoomMessage - { - /// - /// - /// - public int UserId { get; set; } - - /// - /// - /// - public int RoomTypeId { get; set; } - - /// - /// - /// - public int PresetNumber { get; set; } - } \ No newline at end of file diff --git a/src/PepperDash.Core/WebApi/Presets/WebApiPasscodeClient.cs b/src/PepperDash.Core/WebApi/Presets/WebApiPasscodeClient.cs deleted file mode 100644 index 32e63cda..00000000 --- a/src/PepperDash.Core/WebApi/Presets/WebApiPasscodeClient.cs +++ /dev/null @@ -1,280 +0,0 @@ -extern alias NewtonsoftJson; - -using System; -using Crestron.SimplSharp; // For Basic SIMPL# Classes -using Crestron.SimplSharp.CrestronIO; -using Crestron.SimplSharp.Net.Http; -using Crestron.SimplSharp.Net.Https; -using JsonConvert = NewtonsoftJson::Newtonsoft.Json.JsonConvert; -using JObject = NewtonsoftJson::Newtonsoft.Json.Linq.JObject; -using PepperDash.Core.JsonToSimpl; - - -namespace PepperDash.Core.WebApi.Presets; - -/// -/// Passcode client for the WebApi -/// - public class WebApiPasscodeClient : IKeyed - { - /// - /// Notifies when user received - /// - public event EventHandler UserReceived; - - /// - /// Notifies when Preset received - /// - public event EventHandler PresetReceived; - - /// - /// Unique identifier for this instance - /// - public string Key { get; private set; } - - //string JsonMasterKey; - - /// - /// An embedded JsonToSimpl master object. - /// - JsonToSimplGenericMaster J2SMaster; - - string UrlBase; - - string DefaultPresetJsonFilePath; - - User CurrentUser; - - Preset CurrentPreset; - - - /// - /// SIMPL+ can only execute the default constructor. If you have variables that require initialization, please - /// use an Initialize method - /// - public WebApiPasscodeClient() - { - } - - /// - /// Initializes the instance - /// - /// - /// - /// - /// - public void Initialize(string key, string jsonMasterKey, string urlBase, string defaultPresetJsonFilePath) - { - Key = key; - //JsonMasterKey = jsonMasterKey; - UrlBase = urlBase; - DefaultPresetJsonFilePath = defaultPresetJsonFilePath; - - J2SMaster = new JsonToSimplGenericMaster(); - J2SMaster.SaveCallback = this.SaveCallback; - J2SMaster.Initialize(jsonMasterKey); - } - - /// - /// Gets the user for a passcode - /// - /// - public void GetUserForPasscode(string passcode) - { - // Bullshit duplicate code here... These two cases should be the same - // except for https/http and the certificate ignores - if (!UrlBase.StartsWith("https")) - return; - var req = new HttpsClientRequest(); - req.Url = new UrlParser(UrlBase + "/api/users/dopin"); - req.RequestType = Crestron.SimplSharp.Net.Https.RequestType.Post; - req.Header.AddHeader(new HttpsHeader("Content-Type", "application/json")); - req.Header.AddHeader(new HttpsHeader("Accept", "application/json")); - var jo = new JObject(); - jo.Add("pin", passcode); - req.ContentString = jo.ToString(); - - var client = new HttpsClient(); - client.HostVerification = false; - client.PeerVerification = false; - var resp = client.Dispatch(req); - var handler = UserReceived; - if (resp.Code == 200) - { - //CrestronConsole.PrintLine("Received: {0}", resp.ContentString); - var user = JsonConvert.DeserializeObject(resp.ContentString); - CurrentUser = user; - if (handler != null) - UserReceived(this, new UserReceivedEventArgs(user, true)); - } - else - if (handler != null) - UserReceived(this, new UserReceivedEventArgs(null, false)); - } - - /// - /// - /// - /// - /// - /// - /// GetPresetForThisUser method - /// - public void GetPresetForThisUser(int roomTypeId, int presetNumber) - { - if (CurrentUser == null) - { - CrestronConsole.PrintLine("GetPresetForThisUser no user loaded"); - return; - } - - var msg = new UserAndRoomMessage - { - UserId = CurrentUser.Id, - RoomTypeId = roomTypeId, - PresetNumber = presetNumber - }; - - var handler = PresetReceived; - try - { - if (!UrlBase.StartsWith("https")) - return; - var req = new HttpsClientRequest(); - req.Url = new UrlParser(UrlBase + "/api/presets/userandroom"); - req.RequestType = Crestron.SimplSharp.Net.Https.RequestType.Post; - req.Header.AddHeader(new HttpsHeader("Content-Type", "application/json")); - req.Header.AddHeader(new HttpsHeader("Accept", "application/json")); - req.ContentString = JsonConvert.SerializeObject(msg); - - var client = new HttpsClient(); - client.HostVerification = false; - client.PeerVerification = false; - - // ask for the preset - var resp = client.Dispatch(req); - if (resp.Code == 200) // got it - { - //Debug.Console(1, this, "Received: {0}", resp.ContentString); - var preset = JsonConvert.DeserializeObject(resp.ContentString); - CurrentPreset = preset; - - //if there's no preset data, load the template - if (preset.Data == null || preset.Data.Trim() == string.Empty || JObject.Parse(preset.Data).Count == 0) - { - //Debug.Console(1, this, "Loaded preset has no data. Loading default template."); - LoadDefaultPresetData(); - return; - } - - J2SMaster.LoadWithJson(preset.Data); - if (handler != null) - PresetReceived(this, new PresetReceivedEventArgs(preset, true)); - } - else // no existing preset - { - CurrentPreset = new Preset(); - LoadDefaultPresetData(); - if (handler != null) - PresetReceived(this, new PresetReceivedEventArgs(null, false)); - } - } - catch (HttpException e) - { - var resp = e.Response; - Debug.Console(1, this, "No preset received (code {0}). Loading default template", resp.Code); - LoadDefaultPresetData(); - if (handler != null) - PresetReceived(this, new PresetReceivedEventArgs(null, false)); - } - } - - void LoadDefaultPresetData() - { - CurrentPreset = null; - if (!File.Exists(DefaultPresetJsonFilePath)) - { - Debug.Console(0, this, "Cannot load default preset file. Saving will not work"); - return; - } - using (StreamReader sr = new StreamReader(DefaultPresetJsonFilePath)) - { - try - { - var data = sr.ReadToEnd(); - J2SMaster.SetJsonWithoutEvaluating(data); - CurrentPreset = new Preset() { Data = data, UserId = CurrentUser.Id }; - } - catch (Exception e) - { - Debug.Console(0, this, "Error reading default preset JSON: \r{0}", e); - } - } - } - - /// - /// - /// - /// - /// - /// - /// SavePresetForThisUser method - /// - public void SavePresetForThisUser(int roomTypeId, int presetNumber) - { - if (CurrentPreset == null) - LoadDefaultPresetData(); - //return; - - //// A new preset needs to have its numbers set - //if (CurrentPreset.IsNewPreset) - //{ - CurrentPreset.UserId = CurrentUser.Id; - CurrentPreset.RoomTypeId = roomTypeId; - CurrentPreset.PresetNumber = presetNumber; - //} - J2SMaster.Save(); // Will trigger callback when ready - } - - /// - /// After save operation on JSON master happens, send it to server - /// - /// - void SaveCallback(string json) - { - CurrentPreset.Data = json; - - if (!UrlBase.StartsWith("https")) - return; - var req = new HttpsClientRequest(); - req.RequestType = Crestron.SimplSharp.Net.Https.RequestType.Post; - req.Url = new UrlParser(string.Format("{0}/api/presets/addorchange", UrlBase)); - req.Header.AddHeader(new HttpsHeader("Content-Type", "application/json")); - req.Header.AddHeader(new HttpsHeader("Accept", "application/json")); - req.ContentString = JsonConvert.SerializeObject(CurrentPreset); - - var client = new HttpsClient(); - client.HostVerification = false; - client.PeerVerification = false; - try - { - var resp = client.Dispatch(req); - - // 201=created - // 204=empty content - if (resp.Code == 201) - CrestronConsole.PrintLine("Preset added"); - else if (resp.Code == 204) - CrestronConsole.PrintLine("Preset updated"); - else if (resp.Code == 209) - CrestronConsole.PrintLine("Preset already exists. Cannot save as new."); - else - CrestronConsole.PrintLine("Preset save failed: {0}\r", resp.Code, resp.ContentString); - } - catch (HttpException e) - { - - CrestronConsole.PrintLine("Preset save exception {0}", e.Response.Code); - } - } - } diff --git a/src/PepperDash.Essentials.Core/Config/Essentials/ConfigUpdater.cs b/src/PepperDash.Essentials.Core/Config/Essentials/ConfigUpdater.cs deleted file mode 100644 index a41c43e0..00000000 --- a/src/PepperDash.Essentials.Core/Config/Essentials/ConfigUpdater.cs +++ /dev/null @@ -1,259 +0,0 @@ - - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; -using Crestron.SimplSharp.CrestronIO; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using Crestron.SimplSharp.Net.Http; -using Crestron.SimplSharpPro.Diagnostics; - -using PepperDash.Core; -using Serilog.Events; - -namespace PepperDash.Essentials.Core.Config; - -public static class ConfigUpdater -{ - public static event EventHandler ConfigStatusChanged; - - public static void GetConfigFromServer(string url) - { - Debug.LogMessage(LogEventLevel.Information, "Attempting to get new config from '{0}'", url); - - // HTTP GET - var req = new HttpClientRequest(); - - try - { - req.RequestType = RequestType.Get; - req.Url.Parse(url); - - new HttpClient().DispatchAsync(req, (r, e) => - { - if (e == HTTP_CALLBACK_ERROR.COMPLETED) - { - if (r.Code == 200) - { - var newConfig = r.ContentString; - - OnStatusUpdate(eUpdateStatus.ConfigFileReceived); - - ArchiveExistingPortalConfigs(); - - CheckForLocalConfigAndDelete(); - - WriteConfigToFile(newConfig); - - RestartProgram(); - } - else - { - Debug.LogMessage(LogEventLevel.Information, "Config Update Process Stopped. Failed to get config file from server: {0}", r.Code); - OnStatusUpdate(eUpdateStatus.UpdateFailed); - } - } - else - Debug.LogMessage(LogEventLevel.Information, "Request for config from Server Failed: {0}", e); - }); - } - catch (Exception e) - { - Debug.LogMessage(LogEventLevel.Debug, "Error Getting Config from Server: {0}", e); - } - - } - - static void OnStatusUpdate(eUpdateStatus status) - { - var handler = ConfigStatusChanged; - - if(handler != null) - { - handler(typeof(ConfigUpdater), new ConfigStatusEventArgs(status)); - } - } - - static void WriteConfigToFile(string configData) - { - var filePath = Global.FilePathPrefix+ "configurationFile-updated.json"; - - try - { - var config = JObject.Parse(configData).ToObject(); - - ConfigWriter.WriteFile(filePath, configData); - - OnStatusUpdate(eUpdateStatus.WritingConfigFile); - } - catch (Exception e) - { - Debug.LogMessage(LogEventLevel.Debug, "Error parsing new config: {0}", e); - - OnStatusUpdate(eUpdateStatus.UpdateFailed); - } - } - - /// - /// Checks for any existing portal config files and archives them - /// - static void ArchiveExistingPortalConfigs() - { - var filePath = Global.FilePathPrefix + Global.ConfigFileName; - - var configFiles = ConfigReader.GetConfigFiles(filePath); - - if (configFiles != null) - { - Debug.LogMessage(LogEventLevel.Information, "Existing config files found. Moving to Archive folder."); - - OnStatusUpdate(eUpdateStatus.ArchivingConfigs); - - MoveFilesToArchiveFolder(configFiles); - } - else - { - Debug.LogMessage(LogEventLevel.Information, "No Existing config files found in '{0}'. Nothing to archive", filePath); - } - } - - /// - /// Checks for presence of archive folder and if found deletes contents. - /// Moves any config files to the archive folder and adds a .bak suffix - /// - /// - static void MoveFilesToArchiveFolder(FileInfo[] files) - { - string archiveDirectoryPath = Global.FilePathPrefix + "archive"; - - if (!Directory.Exists(archiveDirectoryPath)) - { - // Directory does not exist, create it - Directory.Create(archiveDirectoryPath); - } - else - { - // Directory exists, first clear any contents - var archivedConfigFiles = ConfigReader.GetConfigFiles(archiveDirectoryPath + Global.DirectorySeparator + Global.ConfigFileName + ".bak"); - - if(archivedConfigFiles != null || archivedConfigFiles.Length > 0) - { - Debug.LogMessage(LogEventLevel.Information, "{0} Existing files found in archive folder. Deleting.", archivedConfigFiles.Length); - - for (int i = 0; i < archivedConfigFiles.Length; i++ ) - { - var file = archivedConfigFiles[i]; - Debug.LogMessage(LogEventLevel.Information, "Deleting archived file: '{0}'", file.FullName); - file.Delete(); - } - } - - } - - // Move any files from the program folder to the archive folder - foreach (var file in files) - { - Debug.LogMessage(LogEventLevel.Information, "Moving config file '{0}' to archive folder", file.FullName); - - // Moves the file and appends the .bak extension - var fileDest = archiveDirectoryPath + "/" + file.Name + ".bak"; - if(!File.Exists(fileDest)) - { - file.MoveTo(fileDest); - } - else - Debug.LogMessage(LogEventLevel.Information, "Cannot move file to archive folder. Existing file already exists with same name: '{0}'", fileDest); - } - } - - /// - /// Checks for LocalConfig folder in file system and deletes if found - /// - static void CheckForLocalConfigAndDelete() - { - var folderPath = Global.FilePathPrefix + ConfigWriter.LocalConfigFolder; - - if (Directory.Exists(folderPath)) - { - OnStatusUpdate(eUpdateStatus.DeletingLocalConfig); - Directory.Delete(folderPath); - Debug.LogMessage(LogEventLevel.Information, "Local Config Found in '{0}'. Deleting.", folderPath); - } - } - - /// - /// Connects to the processor via SSH and restarts the program - /// - static void RestartProgram() - { - Debug.LogMessage(LogEventLevel.Information, "Attempting to Reset Program"); - - OnStatusUpdate(eUpdateStatus.RestartingProgram); - - string response = string.Empty; - - CrestronConsole.SendControlSystemCommand(string.Format("progreset -p:{0}", InitialParametersClass.ApplicationNumber), ref response); - - Debug.LogMessage(LogEventLevel.Debug, "Console Response: {0}", response); - } - -} - - /// - /// Enumeration of eUpdateStatus values - /// - public enum eUpdateStatus - { - /// - /// UpdateStarted status - /// - UpdateStarted, - - /// - /// ConfigFileReceived status - /// - ConfigFileReceived, - - /// - /// ArchivingConfigs status - /// - ArchivingConfigs, - - /// - /// DeletingLocalConfig status - /// - DeletingLocalConfig, - - /// - /// WritingConfigFile status - /// - WritingConfigFile, - - /// - /// RestartingProgram status - /// - RestartingProgram, - - /// - /// UpdateSucceeded status - /// - UpdateSucceeded, - - /// - /// UpdateFailed status - /// - UpdateFailed - } - -public class ConfigStatusEventArgs : EventArgs -{ - public eUpdateStatus UpdateStatus { get; private set; } - - public ConfigStatusEventArgs(eUpdateStatus status) - { - UpdateStatus = status; - } -} \ No newline at end of file diff --git a/src/PepperDash.Essentials/ClassDiagram1.cd b/src/PepperDash.Essentials/ClassDiagram1.cd deleted file mode 100644 index aa0f4ed0..00000000 --- a/src/PepperDash.Essentials/ClassDiagram1.cd +++ /dev/null @@ -1,881 +0,0 @@ - - - - - - AAAAAQAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAIAgA= - Audio\EssentialsVolumeLevelConfig.cs - - - - - - AAAAAAAAEAAAAAAAAAAAAAAAAIAAAAgBAAAAAAAAAAA= - Audio\EssentialsVolumeLevelConfig.cs - - - - - - AAAAAAAIAAAAAAAABAAAACAAIAAAAQAAAAAAAAAAEAA= - Config\ConfigReader.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAA= - Config\DeviceFactory.cs - - - - - - AAAAAAEAAAAAQAIAAAAAAAACAAAAAAAAAAAAAAEAAAA= - Config\EssentialsConfig.cs - - - - - - AAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Config\EssentialsConfig.cs - - - - - - AAAAAAAgEAAAAAAEAAAAAAAAAAAAAAAAAAAAAEAIAIA= - Configuration ORIGINAL\ConfigTieLine.cs - - - - - - AEAAAAAAAAAAgQAAAAAAgAAAAAAAAAAAAAAgEDAADAQ= - Configuration ORIGINAL\Configuration.cs - - - - - - AAAAAAAAAAAAAAQAAAAAAAQAAACAAAAAAAAAAAAAAAA= - Configuration ORIGINAL\Configuration.cs - - - - - - AAAAAAAAAgAAAAAAAEAAAAAAAAAAAAAAAAAgAAAAAAA= - Configuration ORIGINAL\Configuration.cs - - - - - - IQAAAAAEAAAAAAADAAACABQAAAAAAAAAAAAAAAAAAAA= - Configuration ORIGINAL\Configuration.cs - - - - - - AAAAAAAAAAAAAAAAAEAAAAAAAAAAAIAAAAAgAAAIAAA= - Configuration ORIGINAL\ConfigurationHelpers.cs - - - - - - AAAAAAAAAAAQAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA= - Configuration ORIGINAL\Factories\DmFactory.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAEDAAKAA= - Configuration ORIGINAL\Factories\FactoryHelper.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAABAAAA= - Configuration ORIGINAL\Factories\FactoryHelper.cs - - - - - - AAoAgAAIAEAACAAEAIEIBICAAAAAAABAAAAAAAAAAAA= - ControlSystem.cs - - - - - - AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA= - Devices\Amplifier.cs - - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAA= - Room\Cotija\CotijaConfig.cs - - - - - - AAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAA= - Room\Cotija\CotijaConfig.cs - - - - - - CAAABAABAgACCAKGBIAAEyBAFAAACYSAgIAAAAJkAAA= - Room\Cotija\CotijaSystemController.cs - - - - - - AAQIQAAAAAAAAgAAAAAAQAAAAAAAAAAAAAAAABAAAAA= - Room\Cotija\RoomBridges\CotijaBridgeBase.cs - - - - - - AAAIAAAAIABAAkgAABgIAAAAAAAAAEAAAAAAgBAAACA= - Room\Cotija\RoomBridges\CotijaEssentialsHuddleSpaceRoomBridge.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAA= - Room\Cotija\RoomBridges\CotijaEssentialsHuddleSpaceRoomBridge.cs - - - - - - iQFBQAIAAgAAgQAEQACAMABAAABAACAQUAAQAAgCgBA= - Room\Types\EssentialsHuddleSpaceRoom.cs - - - - - - - iQFBQAIAIgQMgQAEQAigMABAAABAADIwUACQAAgCgTE= - Room\Types\EssentialsHuddleVtc1Room.cs - - - - - - - iQAEAAIACkAAAQAOQASgMAAJAABgAAAQQAAQAAgCgBA= - Room\Types\EssentialsPresentationRoom.cs - - - - - - - gQAAEAICECgCAQAEAAAUIwIyAAAAgACiAgAAAQECAgA= - Room\Types\EssentialsRoomBase.cs - - - - - - AICCIAAIGIAAAAAgCAAIAEAAAAAAAAAAAAEAIAAAAAA= - UI\CrestronTouchpanelPropertiesConfig.cs - - - - - - AAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - UI\CrestronTouchpanelPropertiesConfig.cs - - - - - - AAAIAEAAAAAAAAAAAAAAAAEAAAAACKIBAAgACAAAAAA= - UI\EssentialsTouchpanelController.cs - - - - - - AAAAQAAAACAAAAABAAAAAAAAAABAAAAAAAAAAkAAAAA= - UI\HttpLogoServer.cs - - - - - - j+jWCNqEIGzi4UTaTgyn37kpncQJK7L42VMLmMgTE5A= - UI\JoinConstants\UIBoolJoin.cs - - - - - - BAggBIABCQAAGAAQAAAACAACAAAAAAAAAAIAAAAAAAA= - UI\JoinConstants\UISmartObjectJoin.cs - - - - - - BkBgIAgAAggOQAFGAYQIABACgCEBjkSQAUEAASIABCE= - UI\JoinConstants\UIStringlJoin.cs - - - - - - AAQAAAACAAAACAEAAIAAAAAAIABAIAAAABAAAEAAAAA= - UI\JoinConstants\UIUshortJoin.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA= - UI\SubpageReferenceListActivityItem.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA= - UI\SubpageReferenceListCallStagingItem.cs - - - - - - AAAABAAAAAAAAAAAAAAAAAAAAgAAAAACAAAAAABgAAA= - UI\SubpageReferenceListSourceItem.cs - - - - - - CAAIkAAAAAAQEAAAEAACAAAAAIAEABAAAgAACAAAAAA= - UIDrivers\enums and base.cs - - - - - - ABAAAAAAAhgAAAAAEAAAAAAAAIAEAAAAAAAAAAAAAAA= - UIDrivers\Essentials\EssentialsPanelMainInterfaceDriver.cs - - - - - - gTEAIIAiCggFNCQ4EA4AWBkAKJCEqAAOS4CKMAQQJQA= - UIDrivers\Essentials\EssentialsPresentationPanelAvFunctionsDriver.cs - - - - - - gRQAIICuAghENHQpEA4IWCkBMJDEsEAEC4CAMARQIBA= - UIDrivers\EssentialsHuddle\EssentialsHuddlePanelAvFunctionsDriver.cs - - - - - - GRwAIYC+oghAeHStEDAIWCdBMADEsBAcDwCAMARYIBg= - UIDrivers\EssentialsHuddleVTC\EssentialsHuddleVtc1PanelAvFunctionsDriver.cs - - - - - - - AAAQgAIAAAAAAAAAEAAAAAQAAAAEAAAAAAAAEAAAgAA= - UIDrivers\JoinedSigInterlock.cs - - - - - - AAAAAAAAAAAAAAAAEAAAQAAABIAEAAAAAAAAAAAAAAA= - UIDrivers\Page Drivers\SingleSubpageModalAndBackDriver.cs - - - - - - AAAAAAAAAAAAAAAAEAAAAAAABAAEAAAAAAAAAAAAAAA= - UIDrivers\Page Drivers\SingleSubpageModalDriver.cs - - - - - - AAAQAAIAAAAAAAAIEAAAAAAAAAAEAAAAAAAAEAAAgAA= - UIDrivers\SigInterlock.cs - - - - - - AAAAAAAACAAACBAAAAAAAAAAAAAAAAAAAAIAAAAAAQA= - UIDrivers\SmartObjectRoomsList.cs - - - - - - AAAAQAAAAAAAAAAAABAAQAAAAAAAAAACAAEAAAAAAAA= - UIDrivers\SmartObjectRoomsList.cs - - - - - - AAAAAAABAAAAAEAAAAAAAAAAAAAAAAAAAQAAAAAAAAA= - UIDrivers\VolumeAndSourceChangeArgs.cs - - - - - - IAGigRBpCgZwAIMSBBIbIgAAImAPtEBiAAgECpJgKQo= - OTHER\Fusion\EssentialsHuddleSpaceFusionSystemControllerBase.cs - - - - - - - AAAAAACgAIQAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAA= - OTHER\Fusion\EssentialsHuddleSpaceFusionSystemControllerBase.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAAAAAAAAAA= - OTHER\Fusion\EssentialsHuddleSpaceFusionSystemControllerBase.cs - - - - - - AACAAAAAAgAAAIAAAAAAAAAgIBAQAAAAAAAAAAAAAQA= - OTHER\Fusion\EssentialsHuddleVtc1FusionController.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAA= - OTHER\Fusion\FusionEventHandlers.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAA= - OTHER\Fusion\FusionEventHandlers.cs - - - - - - AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - OTHER\Fusion\FusionProcessorQueries.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAEAAAA= - OTHER\Fusion\FusionProcessorQueries.cs - - - - - - AAICAAAAAAAAAAAAAAAAAACAAAATQAAAAAAAABAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAQAQAAAAAAAAQAAAAAAQAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAQAQAAAAAAAAQAAAAAAQAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAACACAAAAQAAAAAAAAAAAAAAAAAAAACAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAACAAAgAAQAAAAAAAAAAAAAAAAAAIAAAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAgAAQAAAAAAAAAAAAAAAAAAIAAAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAACAAAAAAQAAAAAAAAAAgAAAAAAAAAAABAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AABCAAAAYEAAEBIBAIAAJAQAQKAYAAAIEAAAEAACCgg= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAgAAAAAAAAAQAAAAAAAAAAAAAAAAEAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAABAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAgAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAgAQAAIAAAAAAACAAAAAAAAAAAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAA= - OTHER\Fusion\FusionRviDataClasses.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAIAgAAQAAAAAAAAEAAAAAAA= - Room\Config\DDVC01RoomPropertiesConfig.cs - - - - - - AAAAAAAAAAAAAAAAAEAAAAQAAAAAAAAAAAAAAAAAAAA= - Room\Config\DDVC01RoomPropertiesConfig.cs - - - - - - AAAAAAAAAAAAgAAAAAAAAAAACAAAAAABAAAAAAAAABA= - Room\Config\EssentialsHuddleRoomPropertiesConfig.cs - - - - - - AAAAAAAAAAAAgAAAAAAAAAAACIAAAAABAAAAAAAAABA= - Room\Config\EssentialsHuddleVtc1PropertiesConfig.cs - - - - - - AAAAAAACAIAAAAAAAAAAABAACAAAAAABAAAAAAAAABA= - Room\Config\EssentialsPresentationPropertiesConfig.cs - - - - - - AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAEAAAAAA= - Room\Config\EssentialsRoomConfig.cs - - - - - - AABAEQAAAAEoAAEEAAQAAAACAAAAAAgggAAAAQAAAgA= - Room\Config\EssentialsRoomConfig.cs - - - - - - AAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Room\Config\EssentialsRoomConfig.cs - - - - - - AAAAAAAAAAEAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAA= - Room\Config\EssentialsRoomConfig.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAgABAAAAAIAAAAAA= - Room\Config\EssentialsRoomConfig.cs - - - - - - AAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAA= - Room\Config\EssentialsRoomConfig.cs - - - - - - AAAAAAAAAAAAAAAAAAAAQAAAgAAAAAAAAAAAAAAAAAA= - Room\Config\EssentialsRoomConfig.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIACQAAAAAAAAA= - Room\Config\EssentialsRoomConfig.cs - - - - - - AACAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAA= - Room\Config\EssentialsRoomConfig.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAA= - Room\Config\EssentialsRoomConfig.cs - - - - - - AAAAAAAAAAAAABAACAAAAAAAAAAAAAAAAAAAAAAAAAA= - Room\Config\EssentialsRoomEmergencyConfig.cs - - - - - - AAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAABQAAAAAAAAA= - Room\Config\EssentialsRoomEmergencyConfig.cs - - - - - - AUAAAAgAAAACwAYAAAAAAAEAAAAAAAAAIcAAAEAAAAA= - Room\Cotija\CotijaDdvc01DeviceBridge.cs - - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= - Room\Cotija\DeviceTypeInterfaces\IChannelExtensions.cs - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= - Room\Cotija\DeviceTypeInterfaces\IColorExtensions.cs - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= - Room\Cotija\DeviceTypeInterfaces\IDPadExtensions.cs - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= - Room\Cotija\DeviceTypeInterfaces\IDvrExtensions.cs - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= - Room\Cotija\DeviceTypeInterfaces\INumericExtensions.cs - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= - Room\Cotija\DeviceTypeInterfaces\IPowerExtensions.cs - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= - Room\Cotija\DeviceTypeInterfaces\ISetTopBoxControlsExtensions.cs - - - - - - AAACAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAA= - Room\Cotija\DeviceTypeInterfaces\ITransportExtensions.cs - - - - - - gACIAAAAAAICAFAAAACAAAEIIAAAAAQAQAAAABAAAAA= - Room\Cotija\RoomBridges\CotijaDdvc01RoomBridge.cs - - - - - - - AAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Room\Emergency\EsentialsRoomEmergencyContactClosure.cs - - - - - - - AAAAAAAAAAAAAAAASBAAAAAAAAAAAAAABAAAAAAAEAA= - Room\Emergency\EsentialsRoomEmergencyContactClosure.cs - - - - - - AAAQAAAAAiACDAAAGCAACgAIAABECBAgQAAAAQAAAAA= - UIDrivers\EssentialsHuddle\EssentialsHuddleTechPageDriver.cs - - - - - - XAASAoAiAagwAcBAGAUURWQEOHQFAKCmAABCNSSEDPA= - UIDrivers\VC\EssentialsVideoCodecUiDriver.cs - - - - - - AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Room\Types\EssentialsRoomBase.cs - - - - - - AAgAAAAAAAAACBAAACAAAAIBAAAEAAAEAgAAAAAAIAA= - UIDrivers\EssentialsHuddleVTC\EssentialsHuddleVtc1PanelAvFunctionsDriver.cs - - - - - - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA= - Room\Cotija\Interfaces.cs - - - - - - AAAAAAAAQAAAAAAACAAAAAAAAAAAAAAAAAAAAAEACAA= - Room\Types\EssentialsRoomBase.cs - - - - - - AAAAAAAAACAAAAAAAAAAAAAAAAACAAAAAAAAAAEAAAA= - Room\Types\EssentialsRoomBase.cs - - - - - - AAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAIEAAAA= - Room\Types\EssentialsRoomBase.cs - - - - - - AIAAAAAAAAAAAAAAAhBAAAAAAAAAAACYAAAAAAAAAAA= - UIDrivers\enums and base.cs - - - - - - AAAAAAAAAAAAABAAAAAAAAAAAAAAACAAAEAAAAAAAAA= - UIDrivers\enums and base.cs - - - - - - AAAAAAAEAAAAAAAAAIAAAAAAAAQAAAAQAAAAAAAAAAA= - UIDrivers\enums and base.cs - - - - - - AAAAABAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAA= - UIDrivers\enums and base.cs - - - - - - AAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - UIDrivers\enums and base.cs - - - - - - AAAAgCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - UIDrivers\VolumeAndSourceChangeArgs.cs - - - - - - AAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= - Room\Cotija\RoomBridges\CotijaEssentialsHuddleSpaceRoomBridge.cs - - - - - - AAAAAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAACAAAAA= - UIDrivers\VolumeAndSourceChangeArgs.cs - - - - \ No newline at end of file diff --git a/src/PepperDash.Essentials/ControlSystem.cs b/src/PepperDash.Essentials/ControlSystem.cs index c002e3a9..fcb48fdd 100644 --- a/src/PepperDash.Essentials/ControlSystem.cs +++ b/src/PepperDash.Essentials/ControlSystem.cs @@ -5,7 +5,6 @@ using System.Reflection; using Crestron.SimplSharp; using Crestron.SimplSharp.CrestronIO; using Crestron.SimplSharpPro; -using Crestron.SimplSharpPro.CrestronThread; using Crestron.SimplSharpPro.Diagnostics; using PepperDash.Core; using PepperDash.Essentials.Core; @@ -28,10 +27,8 @@ namespace PepperDash.Essentials; /// provides methods for platform determination, configuration loading, and system teardown. public class ControlSystem : CrestronControlSystem, ILoadConfig { - private HttpLogoServer LogoServer; - - private Timer _startTimer; - private ManualResetEventSlim _initializeEvent; + private Timer startTimer; + private ManualResetEventSlim initializeEvent; private const long StartupTime = 500; /// @@ -79,16 +76,16 @@ public class ControlSystem : CrestronControlSystem, ILoadConfig { Debug.LogMessage(LogEventLevel.Debug, "******************* Initializing System **********************"); - _startTimer = new Timer(StartSystem, preventInitializationComplete, StartupTime, Timeout.Infinite); + startTimer = new Timer(StartSystem, preventInitializationComplete, StartupTime, Timeout.Infinite); - _initializeEvent = new ManualResetEventSlim(false); + initializeEvent = new ManualResetEventSlim(false); DeviceManager.AllDevicesRegistered += (o, a) => { - _initializeEvent.Set(); + initializeEvent.Set(); }; - _initializeEvent.Wait(30000); + initializeEvent.Wait(30000); Debug.LogMessage(LogEventLevel.Debug, "******************* System Initialization Complete **********************"); @@ -96,7 +93,7 @@ public class ControlSystem : CrestronControlSystem, ILoadConfig } else { - _startTimer = new Timer(StartSystem, preventInitializationComplete, StartupTime, Timeout.Infinite); + startTimer = new Timer(StartSystem, preventInitializationComplete, StartupTime, Timeout.Infinite); } } @@ -357,7 +354,6 @@ public class ControlSystem : CrestronControlSystem, ILoadConfig { LoadDevices(); LoadRooms(); - LoadLogoServer(); DeviceManager.ActivateAll(); @@ -495,67 +491,6 @@ public class ControlSystem : CrestronControlSystem, ILoadConfig } - /// - /// Fires up a logo server if not already running - /// - void LoadLogoServer() - { - if (ConfigReader.ConfigObject.Rooms == null) - { - Debug.LogMessage(LogEventLevel.Information, "No rooms configured. Bypassing Logo server startup."); - return; - } - - if ( - !ConfigReader.ConfigObject.Rooms.Any( - CheckRoomConfig)) - { - Debug.LogMessage(LogEventLevel.Information, "No rooms configured to use system Logo server. Bypassing Logo server startup"); - return; - } - - try - { - LogoServer = new HttpLogoServer(8080, Global.DirectorySeparator + "html" + Global.DirectorySeparator + "logo"); - } - catch (Exception) - { - Debug.LogMessage(LogEventLevel.Information, "NOTICE: Logo server cannot be started. Likely already running in another program"); - } - } - - private bool CheckRoomConfig(DeviceConfig c) - { - string logoDark = null; - string logoLight = null; - string logo = null; - - try - { - if (c.Properties["logoDark"] != null) - { - logoDark = c.Properties["logoDark"].Value("type"); - } - - if (c.Properties["logoLight"] != null) - { - logoLight = c.Properties["logoLight"].Value("type"); - } - - if (c.Properties["logo"] != null) - { - logo = c.Properties["logo"].Value("type"); - } - - return ((logoDark != null && logoDark == "system") || - (logoLight != null && logoLight == "system") || (logo != null && logo == "system")); - } - catch - { - Debug.LogMessage(LogEventLevel.Information, "Unable to find logo information in any room config"); - return false; - } - } private static void LoadAssets() { diff --git a/src/PepperDash.Essentials/HttpLogoServer.cs b/src/PepperDash.Essentials/HttpLogoServer.cs deleted file mode 100644 index 174ebd7e..00000000 --- a/src/PepperDash.Essentials/HttpLogoServer.cs +++ /dev/null @@ -1,123 +0,0 @@ -using System; -using System.Collections.Generic; -using Crestron.SimplSharp; -using Crestron.SimplSharp.CrestronIO; -using Crestron.SimplSharp.Net.Http; - -using PepperDash.Core; -using Serilog.Events; - -namespace PepperDash.Essentials; - -public class HttpLogoServer -{ - /// - /// - /// - readonly HttpServer _server; - - /// - /// - /// - readonly string _fileDirectory; - - /// - /// - /// - public static Dictionary ExtensionContentTypes; - - /// - /// - /// - /// - /// - public HttpLogoServer(int port, string directory) - { - ExtensionContentTypes = new Dictionary - { - //{ ".css", "text/css" }, - //{ ".htm", "text/html" }, - //{ ".html", "text/html" }, - { ".jpg", "image/jpeg" }, - { ".jpeg", "image/jpeg" }, - //{ ".js", "application/javascript" }, - //{ ".json", "application/json" }, - //{ ".map", "application/x-navimap" }, - { ".pdf", "application/pdf" }, - { ".png", "image/png" }, - //{ ".txt", "text/plain" }, - }; - - _server = new HttpServer {Port = port}; - _fileDirectory = directory; - _server.OnHttpRequest += Server_OnHttpRequest; - _server.Open(); - - CrestronEnvironment.ProgramStatusEventHandler += CrestronEnvironment_ProgramStatusEventHandler; - } - - /// - /// - /// - void Server_OnHttpRequest(object sender, OnHttpRequestArgs args) - { - var path = args.Request.Path; - Debug.LogMessage(Serilog.Events.LogEventLevel.Verbose, "HTTP Request with path: '{requestPath:l}'", args.Request.Path); - - try - { - if (File.Exists(_fileDirectory + path)) - { - var filePath = path.Replace('/', '\\'); - var localPath = string.Format(@"{0}{1}", _fileDirectory, filePath); - - Debug.LogMessage(LogEventLevel.Verbose, "HTTP Logo Server attempting to find file: '{localPath:l}'", localPath); - if (File.Exists(localPath)) - { - args.Response.Header.ContentType = GetContentType(new FileInfo(localPath).Extension); - args.Response.ContentStream = new FileStream(localPath, FileMode.Open, FileAccess.Read); - } - else - { - Debug.LogMessage(LogEventLevel.Verbose, "HTTP Logo Server Cannot find file '{localPath:l}'", localPath); - args.Response.ContentString = string.Format("Not found: '{0}'", filePath); - args.Response.Code = 404; - } - } - else - { - Debug.LogMessage(LogEventLevel.Verbose, "HTTP Logo Server: '{file:l}' does not exist", _fileDirectory + path); - args.Response.ContentString = string.Format("Not found: '{0}'", _fileDirectory + path); - args.Response.Code = 404; - } - } - catch (Exception ex) - { - Debug.LogMessage(LogEventLevel.Error, "Exception getting file: {exception}", ex.Message, ex.StackTrace); - Debug.LogMessage(LogEventLevel.Verbose, "Stack Trace: {stackTrace}", ex.StackTrace); - - args.Response.Code = 400; - args.Response.ContentString = string.Format("invalid request"); - } - } - - /// - /// - /// - void CrestronEnvironment_ProgramStatusEventHandler(eProgramStatusEventType programEventType) - { - if (programEventType == eProgramStatusEventType.Stopping) - _server.Close(); - } - - /// - /// - /// - /// - /// - public static string GetContentType(string extension) - { - var type = ExtensionContentTypes.ContainsKey(extension) ? ExtensionContentTypes[extension] : "text/plain"; - return type; - } -} \ No newline at end of file