/// <summary> /// Does any processing after a transition occurs. /// </summary> protected virtual void OnAfterTransition(OperationContext context, Transition transition, QualifiedName cause) { // raise a notification that a transition has occurred. if (m_TransitionCompleted != null) { StateMachineTransitionEventArgs args = new StateMachineTransitionEventArgs( transition.FromState.BrowseName, transition.ToState.BrowseName, cause); m_TransitionCompleted(context, this, args); } }
/// <summary> /// Does any processing before a transition occurs. /// </summary> protected virtual void OnBeforeTransition(OperationContext context, Transition transition, QualifiedName cause) { // raise a notification that a transition is about to occur. if (m_TransitionInitiated != null) { StateMachineTransitionEventArgs args = new StateMachineTransitionEventArgs(transition.FromState.BrowseName, transition.ToState.BrowseName, cause); m_TransitionInitiated(context, this, args); if (args.Cancel) { throw ServiceResultException.Create(StatusCodes.Bad, "Transition to State '{0}' was cancelled because: '{1}'.", transition.ToState.DisplayName, args.CancelReason); } } }
/// <summary> /// Does any processing after a transition occurs. /// </summary> protected virtual void OnAfterTransition(OperationContext context, Transition transition, QualifiedName cause) { // raise a notification that a transition has occurred. if (m_TransitionCompleted != null) { StateMachineTransitionEventArgs args = new StateMachineTransitionEventArgs( transition.FromState.BrowseName, transition.ToState.BrowseName, cause); m_TransitionCompleted(context, this, args); } }
/// <summary> /// Does any processing before a transition occurs. /// </summary> protected virtual void OnBeforeTransition(OperationContext context, Transition transition, QualifiedName cause) { // raise a notification that a transition is about to occur. if (m_TransitionInitiated != null) { StateMachineTransitionEventArgs args = new StateMachineTransitionEventArgs(transition.FromState.BrowseName, transition.ToState.BrowseName, cause); m_TransitionInitiated(context, this, args); if (args.Cancel) { throw ServiceResultException.Create(StatusCodes.Bad, "Transition to State '{0}' was cancelled because: '{1}'.", transition.ToState.DisplayName, args.CancelReason); } } }
/// <summary> /// Called when the program changes state. /// </summary> public void Simulation_TransitionInitiated(OperationContext context, StateMachine machine, StateMachineTransitionEventArgs e) { lock (DataLock) { switch (e.ToState.Name) { case Opc.Ua.BrowseNames.Ready: { if (m_timer != null) { m_timer.Dispose(); m_timer = null; } break; } case Opc.Ua.BrowseNames.Suspended: case Opc.Ua.BrowseNames.Halted: { if (m_timer != null) { m_timer.Dispose(); m_timer = null; } break; } case Opc.Ua.BrowseNames.Running: { OnStartSimulation(); break; } } } }