using System; using ICD.Common.Properties; using ICD.Common.Utils.Extensions; namespace ICD.Common.Utils { public static partial class IcdEnvironment { /// /// Enumeration to define the various runtime environments a module can run in. /// public enum eRuntimeEnvironment { SimplSharp, SimplSharpPro, SimplSharpProMono, Standard } /// /// Enum for the Program Event Types /// public enum eProgramStatusEventType { Stopping, Paused, Resumed, } /// /// Enum for the Ethernet Event Types /// public enum eEthernetEventType { LinkDown, LinkUp, } /// /// Enums for the Ethernet Adapter Type /// [Flags] public enum eEthernetAdapterType { EthernetUnknownAdapter = 0, EthernetLanAdapter = 1, EthernetCsAdapter = 2, EthernetWifiAdapter = 4, EthernetLan2Adapter = 8, } public delegate void ProgramStatusCallback(eProgramStatusEventType type); public delegate void EthernetEventCallback(eEthernetAdapterType adapter, eEthernetEventType type); public static event ProgramStatusCallback OnProgramStatusEvent; public static event EthernetEventCallback OnEthernetEvent; /// /// Raised when the program has completed initialization. /// public static event EventHandler OnProgramInitializationComplete; /// /// Raised when the system date/time has been set. /// public static event EventHandler OnSystemDateTimeChanged; private static readonly SafeCriticalSection s_ProgramInitializationSection = new SafeCriticalSection(); private static bool s_ProgramInitializationComplete; /// /// Returns true if the program has been flagged as completely initialized. /// public static bool ProgramIsInitialized { get { return s_ProgramInitializationSection.Execute(() => s_ProgramInitializationComplete); } } /// /// Called by the program entry point to signify that the program initialization is complete. /// [PublicAPI] public static void SetProgramInitializationComplete() { s_ProgramInitializationSection.Enter(); try { if (s_ProgramInitializationComplete) return; s_ProgramInitializationComplete = true; } finally { s_ProgramInitializationSection.Leave(); } OnProgramInitializationComplete.Raise(null); } } }