Пример #1
0
        private void RegisterUpdatesForComponent(
            SessionComponent c,
            bool terminateOnError = false)
        {
            //Log.Trace("Start RegisterUpdatesForComponent", "RegisterUpdatesForComponent");
            //Log.Trace("Registering component " + c.ComponentName + " for updates.", "RegisterUpdatesForComponent");
            Dictionary <uint, Action> componentUpdates;

            try { componentUpdates = c.UpdateActions; }
            catch (Exception e) {
                Log.Error("Error getting UpdateActions, ensure you have a " +
                          "valid dictionary: " + e, "RegisterUpdatesForComponent");
                return;
            }
            if (componentUpdates == null)
            {
                return;
            }

            foreach (KeyValuePair <uint, Action> kvp in componentUpdates)
            {
                RegisterUpdateForComponent(kvp.Key, kvp.Value, c, terminateOnError);
            }
            //Log.Trace("End RegisterUpdatesForComponent", "RegisterUpdatesForComponent");
        }
Пример #2
0
 public static void RegisterSessionComponent(
     SessionComponent component,
     RunLocation targetLocation = RunLocation.Any,
     bool terminateOnError      = false
     )
 {
     UpdateActions.Enqueue(() => {
         Instance.RegisterComponentInternal(component, targetLocation, terminateOnError);
     });
 }
Пример #3
0
 private void RegisterComponentInternal(
     SessionComponent component,
     RunLocation targetLocation = RunLocation.Any,
     bool terminateOnError      = false)
 {
     if (ShouldRunForRegistered(targetLocation))
     {
         //Log.Debug("Registering component " + component.ComponentName,
         //    "RegisterComponentInternal");
         InitializeComponent(component, terminateOnError);
         RegisteredComponents.Add(component);
     }
 }
Пример #4
0
        private void DeregisterUpdatesForComponent(SessionComponent c)
        {
            List <uint> updateFeqs = new List <uint>(RegisteredUpdates.Keys);

            foreach (uint frequency in updateFeqs)
            {
                RegisteredUpdates[frequency] = RegisteredUpdates[frequency].
                                               Where((x) => x.Component != c).
                                               ToList();

                if (RegisteredUpdates[frequency].Count == 0)
                {
                    RegisteredUpdates.Remove(frequency);
                    continue;
                }
            }
        }
Пример #5
0
        private void TerminateComponent(SessionComponent c)
        {
            if (c.Status == RunStatus.Terminated)
            {
                Log.Warning("Tried to terminate already terminated " + c.ComponentName, "TerminateComponent");
                return;
            }

            Log.Debug("Terminating component", "TerminateComponent");

            try { c.Terminate(); }
            catch (Exception e) {
                Log.Error("Error terminating component " + c.ComponentName + " : " + e, "TerminateComponent");
            }
            c.Status = RunStatus.Terminated;
            DeregisterUpdatesForComponent(c);
            //Log.Trace("Finished terminating component " + c.ComponentName, "TerminateComponent");
        }
Пример #6
0
        private void RegisterUpdateForComponent(
            uint frequency,
            Action update,
            SessionComponent c,
            bool terminateOnError = false)
        {
            //Log.Trace("Start RegisterUpdateForComponent", "RegisterUpdateForComponent");
            if (update == null)
            {
                return;
            }

            //Log.Trace("Registering update action for component " + c.ComponentName + " with frequency " + frequency, "RegisterUpdateForComponent");
            GetUpdateList(frequency).Add(new ComponentUpdate {
                UpdateAction      = update,
                Component         = c,
                TerminatesOnError = terminateOnError,
            });
            //Log.Trace("End RegisterUpdateForComponent", "RegisterUpdateForComponent");
        }
Пример #7
0
 private void InitializeComponent(SessionComponent c, bool terminateOnError = false)
 {
     if (c.Status == RunStatus.NotInitialized)
     {
         try {
             //Log.Debug("Initializing component " + c.ComponentName, "InitializeComponent");
             c.Initialize();
             if (c.IsRunning)
             {
                 RegisterUpdatesForComponent(c, terminateOnError);
             }
         }
         catch (Exception e) {
             Log.Error("Error Initializing component " + c.ComponentName + "  : " + e, "InitializeComponent");
             c.Status = RunStatus.Terminated;
         }
     }
     else
     {
         Log.Warning("Tried to initialize already initialized " + c.ComponentName, "InitializeComponent");
     }
 }
Пример #8
0
        private void TerminateComponent(SessionComponent c)
        {
            if (c.Status == RunStatus.Terminated) {
                Log.Warning("Tried to terminate already terminated " + c.ComponentName, "TerminateComponent");
                return;
            }

            Log.Debug("Terminating component", "TerminateComponent");

            try { c.Terminate(); }
            catch (Exception e) {
                Log.Error("Error terminating component " + c.ComponentName + " : " + e, "TerminateComponent");
            }
            c.Status = RunStatus.Terminated;
            DeregisterUpdatesForComponent(c);
            //Log.Trace("Finished terminating component " + c.ComponentName, "TerminateComponent");
        }
Пример #9
0
        private void RegisterUpdatesForComponent(
            SessionComponent c, 
            bool terminateOnError = false)
        {
            //Log.Trace("Start RegisterUpdatesForComponent", "RegisterUpdatesForComponent");
            //Log.Trace("Registering component " + c.ComponentName + " for updates.", "RegisterUpdatesForComponent");
            Dictionary<uint, Action> componentUpdates;

            try {componentUpdates = c.UpdateActions; }
            catch (Exception e) {
                Log.Error("Error getting UpdateActions, ensure you have a " +
                    "valid dictionary: " + e, "RegisterUpdatesForComponent");
                return;
            }
            if (componentUpdates == null) return;

            foreach (KeyValuePair<uint, Action> kvp in componentUpdates) {
                RegisterUpdateForComponent(kvp.Key, kvp.Value, c, terminateOnError);
            }
            //Log.Trace("End RegisterUpdatesForComponent", "RegisterUpdatesForComponent");
        }
Пример #10
0
        private void RegisterUpdateForComponent(
            uint frequency, 
            Action update, 
            SessionComponent c, 
            bool terminateOnError = false)
        {
            //Log.Trace("Start RegisterUpdateForComponent", "RegisterUpdateForComponent");
            if (update == null) return;

            //Log.Trace("Registering update action for component " + c.ComponentName + " with frequency " + frequency, "RegisterUpdateForComponent");
            GetUpdateList(frequency).Add(new ComponentUpdate {
                UpdateAction = update,
                Component = c,
                TerminatesOnError = terminateOnError,
            });
            //Log.Trace("End RegisterUpdateForComponent", "RegisterUpdateForComponent");
        }
Пример #11
0
 private void RegisterComponentInternal(
     SessionComponent component,
     RunLocation targetLocation = RunLocation.Any,
     bool terminateOnError = false)
 {
     if (ShouldRunForRegistered(targetLocation)) {
         //Log.Debug("Registering component " + component.ComponentName,
         //    "RegisterComponentInternal");
         InitializeComponent(component, terminateOnError);
         RegisteredComponents.Add(component);
     }
 }
Пример #12
0
        private void InitializeComponent(SessionComponent c, bool terminateOnError = false)
        {
            if (c.Status == RunStatus.NotInitialized) {

                try {
                    //Log.Debug("Initializing component " + c.ComponentName, "InitializeComponent");
                    c.Initialize();
                    if (c.IsRunning)
                        RegisterUpdatesForComponent(c, terminateOnError);
                }
                catch (Exception e) {
                    Log.Error("Error Initializing component " + c.ComponentName + "  : " + e, "InitializeComponent");
                    c.Status = RunStatus.Terminated;
                }
            }
            else {
                Log.Warning("Tried to initialize already initialized " + c.ComponentName, "InitializeComponent");
            }
        }
Пример #13
0
        private void DeregisterUpdatesForComponent(SessionComponent c)
        {
            List<uint> updateFeqs = new List<uint>(RegisteredUpdates.Keys);

            foreach (uint frequency in updateFeqs) {
                RegisteredUpdates[frequency] = RegisteredUpdates[frequency].
                    Where((x) => x.Component != c).
                    ToList();

                if (RegisteredUpdates[frequency].Count == 0) {
                    RegisteredUpdates.Remove(frequency);
                    continue;
                }
            }
        }
Пример #14
0
 public static void RegisterSessionComponent(
     SessionComponent component,
     RunLocation targetLocation = RunLocation.Any,
     bool terminateOnError = false
     )
 {
     UpdateActions.Enqueue(() => {
         Instance.RegisterComponentInternal(component, targetLocation, terminateOnError);
     });
 }