/// <summary> /// Updates a transition event after the transition is complete. /// </summary> protected virtual void UpdateTransitionEvent( ISystemContext context, uint transitionId, uint causeId, TransitionEventState e) { TranslationInfo info = new TranslationInfo( "StateTransition", "en-US", "The {0} state machine moved to the {1} state.", this.GetDisplayPath(3, '.'), CurrentState.Value); e.Initialize( context, this, EventSeverity.Medium, new LocalizedText(info)); e.SetChildValue(context, BrowseNames.FromState, LastState, false); e.SetChildValue(context, BrowseNames.ToState, CurrentState, false); e.SetChildValue(context, BrowseNames.Transition, LastTransition, false); }
/// <summary> /// Causes the specified transition to occur. /// </summary> public ServiceResult DoTransition( ISystemContext context, uint transitionId, uint causeId, IList <object> inputArguments, IList <object> outputArguments) { // check for valid transition. uint newState = GetNewStateForTransition(context, transitionId); if (newState == 0) { return(StatusCodes.BadNotSupported); } // check the cause permissions. if (causeId != 0) { if (!IsCausePermitted(context, causeId, true)) { return(StatusCodes.BadUserAccessDenied); } } // do any pre-transition processing. ServiceResult result = InvokeCallback( OnBeforeTransition, context, this, transitionId, causeId, inputArguments, outputArguments); if (ServiceResult.IsBad(result)) { return(result); } // save the last state. if (m_lastState == null) { m_lastState = new FiniteStateVariableState(this); } m_lastState.SetChildValue(context, null, CurrentState, false); // update state and transition variables. UpdateStateVariable(context, newState, CurrentState); UpdateTransitionVariable(context, transitionId, LastTransition); // do any post-transition processing. InvokeCallback( OnAfterTransition, context, this, transitionId, causeId, inputArguments, outputArguments); // report the event. if (this.AreEventsMonitored && !m_suppressTransitionEvents) { TransitionEventState e = CreateTransitionEvent(context, transitionId, causeId); if (e != null) { UpdateTransitionEvent(context, transitionId, causeId, e); ReportEvent(context, e); } } return(ServiceResult.Good); }
/// <summary> /// Updates a transition event after the transition is complete. /// </summary> protected virtual void UpdateTransitionEvent( ISystemContext context, uint transitionId, uint causeId, TransitionEventState e) { TranslationInfo info = new TranslationInfo( "StateTransition", "en-US", "The {0} state machine moved to the {1} state.", this.GetDisplayPath(3, '.'), CurrentState.Value); e.Initialize( context, this, EventSeverity.Medium, new LocalizedText(info)); e.SetChildValue(context, BrowseNames.FromState, LastState, false); e.SetChildValue(context, BrowseNames.ToState, CurrentState, false); e.SetChildValue(context, BrowseNames.Transition, LastTransition, false); }