feat(essentials): Reworks logic in InitializeSystem() to be a bit cleaner using a CEvent and the existing AllDeviceActivated event

This commit is contained in:
Neil Dorin
2021-09-24 17:25:14 -06:00
parent c521a1d551
commit 1e9139f38e
3 changed files with 24 additions and 8 deletions

View File

@@ -28,6 +28,7 @@ namespace PepperDash.Essentials
HttpLogoServer LogoServer;
private CTimer _startTimer;
private CEvent _initializeEvent;
private const long StartupTime = 500;
public ControlSystem()
@@ -46,12 +47,20 @@ namespace PepperDash.Essentials
public override void InitializeSystem()
{
_startTimer = new CTimer(StartSystem,StartupTime);
ushort count = 0;
while (!DeviceManager.AllDevicesActivatedFb && count < 60)
// If the control system is a DMPS type, we need to wait to exit this method until all devices have had time to activate
// to allow any HD-BaseT DM endpoints to register first.
if (Global.ControlSystemIsDmpsType)
{
//Wait for devices to register before returning, as required by DMPS. Max wait is 60 seconds.
CrestronEnvironment.Sleep(1000);
count++;
_initializeEvent = new CEvent();
DeviceManager.AllDevicesActivated += (o, a) =>
{
_initializeEvent.Set();
};
_initializeEvent.Wait(20000);
}
}

View File

@@ -28,11 +28,9 @@ namespace PepperDash.Essentials.Core
public static List<IKeyed> AllDevices { get { return new List<IKeyed>(Devices.Values); } }
public static bool AddDeviceEnabled;
public static bool AllDevicesActivatedFb;
public static void Initialize(CrestronControlSystem cs)
{
AllDevicesActivatedFb = false;
AddDeviceEnabled = true;
CrestronConsole.AddNewConsoleCommand(ListDeviceCommStatuses, "devcommstatus", "Lists the communication status of all devices",
ConsoleAccessLevelEnum.AccessOperator);
@@ -124,7 +122,6 @@ namespace PepperDash.Essentials.Core
private static void OnAllDevicesActivated()
{
AllDevicesActivatedFb = true;
var handler = AllDevicesActivated;
if (handler != null)
{

View File

@@ -32,6 +32,16 @@ namespace PepperDash.Essentials.Core
// TODO: consider making this configurable later
public static IFormatProvider Culture = CultureInfo.CreateSpecificCulture("en-US");
/// <summary>
/// True when the processor type is a DMPS variant
/// </summary>
public static bool ControlSystemIsDmpsType
{
get
{
return ControlSystem.ControllerPrompt.ToLower().IndexOf("dmps") > -1;
}
}
/// <summary>
/// The file path prefix to the folder containing configuration files