Example #1
0
 public void Perform()
 {
     if (file)
     {
         if (NC.App.AppContext.INCCXfer)
         {
             fctrlbind = procFctrl;
         }
         else
         {
             fctrlbind = measFctrl;
         }
         fctrlbind.StartAction();
     }
     else
     {
         daqbind.StartAction();
     }
 }
Example #2
0
 public void Perform()
 {
     if (file)
     {
         if (NC.App.AppContext.INCCXfer)
             fctrlbind = procFctrl;
         else
             fctrlbind = measFctrl;
         fctrlbind.StartAction();
     }
     else
         daqbind.StartAction();
 }
Example #3
0
        /// <summary>
        /// Set up action event handlers for a FileCtrl instance, uses FCtrlBind subclass
        /// </summary>
        /// <returns></returns>
        public bool InitializeFileControllers()
        {
            procFctrl = new FCtrlBind();
            measFctrl = new FCtrlBind();
            LMLoggers.LognLM applog = NC.App.Logger(LMLoggers.AppSection.App);

            /*
             * The action event handlers.
             *
             * There are 7 event types, see ActionEvents.EventType.
             *
             * The code fires a registered event handler at appropriate processing stages based on the action event type.
             * Unregistered handlers are simply ignored.
             * E.g. The ActionStart event is fired when an action starts. An action is a specific user task such as 'assay'
             * over NCD files or an assay from live LMMM DAQ.
             *
             * In the examples shown here for NCD file processing, very little reporting actually occurs.
             * The parameter for each event hnadler is an object, and as yet undefined.
             * I would use delegates to force the appropriate parameter types here, unlike the timer callbacks above.
             * But I've not yet completed this design and implementation
             *
             * Implementing these to report complex status to the logger and the UI control is the next step.
             *
             * I do not know which approach will serve us better for a large system, but we do have both timer pull and system push approaches here, so I'll keep them for now.
             *
             */

            /// set up the 7 magic event handlers
            /// here I have a base handler that does the same thing for every event (writes a string to the log),
            /// and I reuse that string by posting it to the progress handler
            measFctrl.SetEventHandler(ActionEvents.EventType.PreAction, (object o) =>
            {
                string s = FileCtrl.LogAndSkimFileProcessingStatus(ActionEvents.EventType.PreAction, applog, LogLevels.Verbose, o);
                measFctrl.mProgressTracker.ReportProgress(0, s);//  "...");
            });

            measFctrl.SetEventHandler(ActionEvents.EventType.ActionPrep, (object o) =>
            {
                string s = FileCtrl.LogAndSkimFileProcessingStatus(ActionEvents.EventType.ActionPrep, applog, LogLevels.Verbose, o);
                measFctrl.mProgressTracker.ReportProgress(0, s);//"Prep");
            });

            measFctrl.SetEventHandler(ActionEvents.EventType.ActionStart, (object o) =>
            {
                string s = FileCtrl.LogAndSkimFileProcessingStatus(ActionEvents.EventType.ActionStart, applog, LogLevels.Verbose, o);
                measFctrl.mProgressTracker.ReportProgress(1, s);//"Starting...");
            });

            measFctrl.SetEventHandler(ActionEvents.EventType.ActionInProgress, (object o) =>
            {
                measStatus = new MeasurementStatus();
                measStatus.UpdateWithMeasurement();
                measStatus.UpdateWithInstruments();
                updateGUIWithChannelRatesData = true;
                string s2 = FileCtrl.LogAndSkimFileProcessingStatus(ActionEvents.EventType.ActionInProgress, applog, LogLevels.Verbose, o);
                if (!string.IsNullOrEmpty(s2))
                    s2 = "(" + s2 + ")";
                int per = Math.Abs(Math.Min(100, (int)Math.Round(100.0 * ((measStatus.CurrentRepetition - 1) / (double)measStatus.RequestedRepetitions))));
                try
                {
                    measFctrl.mProgressTracker.ReportProgress(per, // a % est of files
                        string.Format("{0} of {1} {2}", measStatus.CurrentRepetition, measStatus.RequestedRepetitions, s2)); // n of m, and file name
                }
                catch (ArgumentOutOfRangeException)
                {
                    applog.TraceEvent(LogLevels.Verbose, 58,  "{0} inconsistent", per);
                }
            });

            measFctrl.SetEventHandler(ActionEvents.EventType.ActionStop, (object o) =>
            {
                string s = FileCtrl.LogAndSkimFileProcessingStatus(ActionEvents.EventType.ActionStop, applog, LogLevels.Warning, o);
                measFctrl.mProgressTracker.ReportProgress(100, s);//"Stopping...");
            });

            measFctrl.SetEventHandler(ActionEvents.EventType.ActionCancel, (object o) =>
            {
                string s = FileCtrl.LogAndSkimFileProcessingStatus(ActionEvents.EventType.ActionCancel, applog, LogLevels.Warning, o);
                measFctrl.mProgressTracker.ReportProgress(100, s);//"Cancelling...");
            });

            measFctrl.SetEventHandler(ActionEvents.EventType.ActionFinished, (object o) =>
            {
                string s = "";
                if (o != null && o is FileCtrl)
                {
                    FileCtrl f = (FileCtrl)o;
                        measStatus = new MeasurementStatus();  // preps local state for refresh on channel and computed rates for now, follow up with all other state
                        measStatus.UpdateWithMeasurement();
                        s = FileCtrl.MeasStatusString(measStatus);
                        updateGUIWithChannelRatesData = true;
                        UpdateGUIWithNewdata();
                    }

                NC.App.Opstate.SOH = NCC.OperatingState.Stopped;  // in case we got here after a Cancel
                // general logger: to the console, and/or listbox and/or log file or DB
                applog.TraceEvent(LogLevels.Verbose, ActionEvents.logid[ActionEvents.EventType.ActionFinished], s);

                // specialized updater for UI or file
                measFctrl.mProgressTracker.ReportProgress(100, "Completed");
            });

            procFctrl.SetEventHandler(ActionEvents.EventType.PreAction, (object o) =>
            {
                string s = FileCtrl.LogAndSkimFileProcessingStatus(ActionEvents.EventType.PreAction, applog, LogLevels.Verbose, o);
                procFctrl.mProgressTracker.ReportProgress(0, s);//  "...");
            });

            procFctrl.SetEventHandler(ActionEvents.EventType.ActionPrep, (object o) =>
            {
                string s = FileCtrl.LogAndSkimFileProcessingStatus(ActionEvents.EventType.ActionPrep, applog, LogLevels.Verbose, o);
                procFctrl.mProgressTracker.ReportProgress(0, s);//"Prep");
            });

            procFctrl.SetEventHandler(ActionEvents.EventType.ActionStart, (object o) =>
            {
                string s = FileCtrl.LogAndSkimFileProcessingStatus(ActionEvents.EventType.ActionStart, applog, LogLevels.Verbose, o);
                procFctrl.mProgressTracker.ReportProgress(1, s);//"Starting...");
            });

            procFctrl.SetEventHandler(ActionEvents.EventType.ActionInProgress, (object o) =>
            {
                NCCTransfer.TransferEventArgs e = (NCCTransfer.TransferEventArgs)o;
                procFctrl.mProgressTracker.ReportProgress(e.percent, e.msg);
            });

            procFctrl.SetEventHandler(ActionEvents.EventType.ActionStop, (object o) =>
            {
                string s = FileCtrl.LogAndSkimFileProcessingStatus(ActionEvents.EventType.ActionStop, applog, LogLevels.Warning, o);
                procFctrl.mProgressTracker.ReportProgress(100, s);//"Stopping...");
            });

            procFctrl.SetEventHandler(ActionEvents.EventType.ActionCancel, (object o) =>
            {
                string s = FileCtrl.LogAndSkimFileProcessingStatus(ActionEvents.EventType.ActionCancel, applog, LogLevels.Warning, o);
                procFctrl.mProgressTracker.ReportProgress(100, s);//"Cancelling...");
            });

            procFctrl.SetEventHandler(ActionEvents.EventType.ActionFinished, (object o) =>
            {
                NC.App.Opstate.SOH = OperatingState.Stopped;  // in case we got here after a Cancel
                // general logger: to the console, and/or listbox and/or log file or DB
                applog.TraceEvent(LogLevels.Verbose, ActionEvents.logid[ActionEvents.EventType.ActionFinished]);

                // specialized updater for UI or file
                procFctrl.mProgressTracker.ReportProgress(100, "Completed");
            });

            NC.App.Opstate.SOH = OperatingState.Void;
            return true;
        }
Example #4
0
        /// <summary>
        /// Set up action event handlers for a FileCtrl instance, uses FCtrlBind subclass
        /// </summary>
        /// <returns></returns>
        public bool InitializeFileControllers()
        {
            procFctrl = new FCtrlBind();
            measFctrl = new FCtrlBind();
            LMLoggers.LognLM applog = NC.App.Logger(LMLoggers.AppSection.App);

            /*
             * The action event handlers.
             *
             * There are 7 event types, see ActionEvents.EventType.
             *
             * The code fires a registered event handler at appropriate processing stages based on the action event type.
             * Unregistered handlers are simply ignored.
             * E.g. The ActionStart event is fired when an action starts. An action is a specific user task such as 'assay'
             * over NCD files or an assay from live LMMM DAQ.
             *
             * In the examples shown here for NCD file processing, very little reporting actually occurs.
             * The parameter for each event hnadler is an object, and as yet undefined.
             * I would use delegates to force the appropriate parameter types here, unlike the timer callbacks above.
             * But I've not yet completed this design and implementation
             *
             * Implementing these to report complex status to the logger and the UI control is the next step.
             *
             * I do not know which approach will serve us better for a large system, but we do have both timer pull and system push approaches here, so I'll keep them for now.
             *
             */

            /// set up the 7 magic event handlers
            /// here I have a base handler that does the same thing for every event (writes a string to the log),
            /// and I reuse that string by posting it to the progress handler
            measFctrl.SetEventHandler(ActionEvents.EventType.PreAction, (object o) =>
            {
                string s = FileCtrl.LogAndSkimFileProcessingStatus(ActionEvents.EventType.PreAction, applog, LogLevels.Verbose, o);
                measFctrl.mProgressTracker.ReportProgress(0, s);//  "...");
            });

            measFctrl.SetEventHandler(ActionEvents.EventType.ActionPrep, (object o) =>
            {
                string s = FileCtrl.LogAndSkimFileProcessingStatus(ActionEvents.EventType.ActionPrep, applog, LogLevels.Verbose, o);
                measFctrl.mProgressTracker.ReportProgress(0, s);//"Prep");
            });

            measFctrl.SetEventHandler(ActionEvents.EventType.ActionStart, (object o) =>
            {
                string s = FileCtrl.LogAndSkimFileProcessingStatus(ActionEvents.EventType.ActionStart, applog, LogLevels.Verbose, o);
                measFctrl.mProgressTracker.ReportProgress(1, s);//"Starting...");
            });

            measFctrl.SetEventHandler(ActionEvents.EventType.ActionInProgress, (object o) =>
            {
                measStatus = new MeasurementStatus();
                measStatus.UpdateWithMeasurement();
                measStatus.UpdateWithInstruments();
                updateGUIWithChannelRatesData = true;
                string s2 = FileCtrl.LogAndSkimFileProcessingStatus(ActionEvents.EventType.ActionInProgress, applog, LogLevels.Verbose, o);
                if (!string.IsNullOrEmpty(s2))
                {
                    s2 = "(" + s2 + ")";
                }
                int per = Math.Abs(Math.Min(100, (int)Math.Round(100.0 * ((measStatus.CurrentRepetition - 1) / (double)measStatus.RequestedRepetitions))));
                try
                {
                    measFctrl.mProgressTracker.ReportProgress(per,                                                                                                 // a % est of files
                                                              string.Format("{0} of {1} {2}", measStatus.CurrentRepetition, measStatus.RequestedRepetitions, s2)); // n of m, and file name
                }
                catch (ArgumentOutOfRangeException)
                {
                    applog.TraceEvent(LogLevels.Verbose, 58, "{0} inconsistent", per);
                }
            });

            measFctrl.SetEventHandler(ActionEvents.EventType.ActionStop, (object o) =>
            {
                string s = FileCtrl.LogAndSkimFileProcessingStatus(ActionEvents.EventType.ActionStop, applog, LogLevels.Warning, o);
                measFctrl.mProgressTracker.ReportProgress(100, s);//"Stopping...");
            });

            measFctrl.SetEventHandler(ActionEvents.EventType.ActionCancel, (object o) =>
            {
                string s = FileCtrl.LogAndSkimFileProcessingStatus(ActionEvents.EventType.ActionCancel, applog, LogLevels.Warning, o);
                measFctrl.mProgressTracker.ReportProgress(100, s);//"Cancelling...");
            });

            measFctrl.SetEventHandler(ActionEvents.EventType.ActionFinished, (object o) =>
            {
                string s = "";
                if (o != null && o is FileCtrl)
                {
                    FileCtrl f = (FileCtrl)o;
                    measStatus = new MeasurementStatus();      // preps local state for refresh on channel and computed rates for now, follow up with all other state
                    measStatus.UpdateWithMeasurement();
                    s = FileCtrl.MeasStatusString(measStatus);
                    updateGUIWithChannelRatesData = true;
                    UpdateGUIWithNewdata();
                }

                NC.App.Opstate.SOH = NCC.OperatingState.Stopped;  // in case we got here after a Cancel
                // general logger: to the console, and/or listbox and/or log file or DB
                applog.TraceEvent(LogLevels.Verbose, ActionEvents.logid[ActionEvents.EventType.ActionFinished], s);

                // specialized updater for UI or file
                measFctrl.mProgressTracker.ReportProgress(100, "Completed");
            });

            procFctrl.SetEventHandler(ActionEvents.EventType.PreAction, (object o) =>
            {
                string s = FileCtrl.LogAndSkimFileProcessingStatus(ActionEvents.EventType.PreAction, applog, LogLevels.Verbose, o);
                procFctrl.mProgressTracker.ReportProgress(0, s);//  "...");
            });

            procFctrl.SetEventHandler(ActionEvents.EventType.ActionPrep, (object o) =>
            {
                string s = FileCtrl.LogAndSkimFileProcessingStatus(ActionEvents.EventType.ActionPrep, applog, LogLevels.Verbose, o);
                procFctrl.mProgressTracker.ReportProgress(0, s);//"Prep");
            });

            procFctrl.SetEventHandler(ActionEvents.EventType.ActionStart, (object o) =>
            {
                string s = FileCtrl.LogAndSkimFileProcessingStatus(ActionEvents.EventType.ActionStart, applog, LogLevels.Verbose, o);
                procFctrl.mProgressTracker.ReportProgress(1, s);//"Starting...");
            });

            procFctrl.SetEventHandler(ActionEvents.EventType.ActionInProgress, (object o) =>
            {
                NCCTransfer.TransferEventArgs e = (NCCTransfer.TransferEventArgs)o;
                procFctrl.mProgressTracker.ReportProgress(e.percent, e.msg);
            });

            procFctrl.SetEventHandler(ActionEvents.EventType.ActionStop, (object o) =>
            {
                string s = FileCtrl.LogAndSkimFileProcessingStatus(ActionEvents.EventType.ActionStop, applog, LogLevels.Warning, o);
                procFctrl.mProgressTracker.ReportProgress(100, s);//"Stopping...");
            });

            procFctrl.SetEventHandler(ActionEvents.EventType.ActionCancel, (object o) =>
            {
                string s = FileCtrl.LogAndSkimFileProcessingStatus(ActionEvents.EventType.ActionCancel, applog, LogLevels.Warning, o);
                procFctrl.mProgressTracker.ReportProgress(100, s);//"Cancelling...");
            });

            procFctrl.SetEventHandler(ActionEvents.EventType.ActionFinished, (object o) =>
            {
                NC.App.Opstate.SOH = OperatingState.Stopped;  // in case we got here after a Cancel
                // general logger: to the console, and/or listbox and/or log file or DB
                applog.TraceEvent(LogLevels.Verbose, ActionEvents.logid[ActionEvents.EventType.ActionFinished]);

                // specialized updater for UI or file
                procFctrl.mProgressTracker.ReportProgress(100, "Completed");
            });

            NC.App.Opstate.SOH = OperatingState.Void;
            return(true);
        }