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