Opc.Ua.FiniteStateMachineState.DoTransition C# (CSharp) Method

DoTransition() public method

Causes the specified transition to occur.
public DoTransition ( ISystemContext context, uint transitionId, uint causeId, IList inputArguments, IList outputArguments ) : ServiceResult
context ISystemContext
transitionId uint
causeId uint
inputArguments IList
outputArguments IList
return ServiceResult
        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;
        }