private void ValidateCanRemoveEventHandler(TState stateId, IStateEventHandler eventHandler)
 {
     if (IsLocked(stateId))
     {
         throw new UnableToRemoveStateMachineElementException(_stateMachine, eventHandler);
     }
 }
 private void ValidateIsNotNull(IStateEventHandler eventHandler)
 {
     if (eventHandler == null)
     {
         throw new ArgumentNullException(nameof(eventHandler));
     }
 }
示例#3
0
        public RequestHandler(SkillRequest @event, ILambdaContext context, IStateEventHandler <TAttributes> stateEventHandler)
        {
            Event   = @event;
            Context = context;
            UserId  = @event.Context?.System.User.UserId ?? @event.Session.User.UserId;

            _stateEventHandler = stateEventHandler;
        }
        public bool ContainsEventHandlerOn(TState stateId, IStateEventHandler eventHandler)
        {
            if (_eventHandlers.ContainsKey(stateId))
            {
                return(_eventHandlers[stateId].Contains(eventHandler));
            }

            return(false);
        }
示例#5
0
        public void SubscribeEventHandlerTo(TState stateId, IStateEventHandler eventHandler)
        {
            ValidateHasStateWithId(stateId);

            if (_stateEventHandlers.ContainsKey(stateId) == false)
            {
                _stateEventHandlers.Add(stateId, new HashSet <IStateEventHandler>());
            }

            _stateEventHandlers[stateId].Add(eventHandler);
        }
示例#6
0
        public void AddEventHandlerTo(TState stateId, IStateEventHandler eventHandler)
        {
            ValidateIsNotNull(eventHandler);

            if (_eventHandlers.ContainsKey(stateId) == false)
            {
                _eventHandlers.Add(stateId, new List <IStateEventHandler>());
            }

            _eventHandlers[stateId].Add(eventHandler);
        }
示例#7
0
        public void SetUp()
        {
            _stateMachine = NewStateMachine();

            _stateId1 = NewStateId();
            _stateId2 = NewStateId();
            _stateId3 = NewStateId();
            _stateId4 = NewStateId();
            _stateId5 = NewStateId();

            _trigger1 = NewTrigger();
            _trigger2 = NewTrigger();
            _trigger3 = NewTrigger();
            _trigger4 = NewTrigger();
            _trigger5 = NewTrigger();

            _stateObject1 = Substitute.For <IState>();
            _stateObject2 = Substitute.For <IState>();
            _stateObject3 = Substitute.For <IState>();
            _stateObject4 = Substitute.For <IState>();
            _stateObject5 = Substitute.For <IState>();

            _guardCondition1 = Substitute.For <IGuardCondition>();
            _guardCondition2 = Substitute.For <IGuardCondition>();
            _guardCondition3 = Substitute.For <IGuardCondition>();
            _guardCondition4 = Substitute.For <IGuardCondition>();
            _guardCondition5 = Substitute.For <IGuardCondition>();

            _stateEventHandler1 = Substitute.For <IStateEventHandler>();
            _stateEventHandler2 = Substitute.For <IStateEventHandler>();
            _stateEventHandler3 = Substitute.For <IStateEventHandler>();
            _stateEventHandler4 = Substitute.For <IStateEventHandler>();
            _stateEventHandler5 = Substitute.For <IStateEventHandler>();

            _event1 = Substitute.For <IEvent>();

            _onBeforeStateChangesSubscriptor1 = Substitute.For <StateChanged <TState, TTrigger> >();
            _onBeforeStateChangesSubscriptor2 = Substitute.For <StateChanged <TState, TTrigger> >();
            _onBeforeStateChangesSubscriptor3 = Substitute.For <StateChanged <TState, TTrigger> >();

            _onStateChangedSubscriptor1 = Substitute.For <StateChanged <TState, TTrigger> >();
            _onStateChangedSubscriptor2 = Substitute.For <StateChanged <TState, TTrigger> >();
            _onStateChangedSubscriptor3 = Substitute.For <StateChanged <TState, TTrigger> >();

            _startCallback     = Substitute.For <Action>();
            _stopCallback      = Substitute.For <Action>();
            _updateCallback    = Substitute.For <Action>();
            _triggerCallback   = Substitute.For <Action <bool> >();
            _sendEventCallback = Substitute.For <Action <bool> >();
        }
        public void Add_Multiple_Event_Handlers()
        {
            var hsm = NewStateMachine();

            IStateEventHandler eventHandler1 = Substitute.For <IStateEventHandler>();
            IStateEventHandler eventHandler2 = Substitute.For <IStateEventHandler>();

            hsm.AddEmpty(1);

            hsm.SubscribeEventHandlersTo(1, eventHandler1, eventHandler2);

            Assert.IsTrue(hsm.HasEventHandlerOn(1, eventHandler1));
            Assert.IsTrue(hsm.HasEventHandlerOn(1, eventHandler2));
        }
示例#9
0
        public bool RemoveEventHandlerFrom(TState stateId, IStateEventHandler eventHandler)
        {
            if (_eventHandlers.ContainsKey(stateId))
            {
                bool removed = _eventHandlers[stateId].Remove(eventHandler);

                if (_eventHandlers[stateId].Count == 0)
                {
                    _eventHandlers.Remove(stateId);
                }

                return(removed);
            }

            return(false);
        }
示例#10
0
        public void Add_Multiple_Event_Handlers()
        {
            var fsm = NewStateMachine();

            IStateEventHandler eventHandler1 = Substitute.For <IStateEventHandler>();
            IStateEventHandler eventHandler2 = Substitute.For <IStateEventHandler>();

            var stateId1 = NewStateId();

            fsm.AddEmpty(stateId1);

            fsm.SubscribeEventHandlersTo(stateId1, eventHandler1, eventHandler2);

            Assert.IsTrue(fsm.ContainsEventHandlerOn(stateId1, eventHandler1));
            Assert.IsTrue(fsm.ContainsEventHandlerOn(stateId1, eventHandler2));
        }
示例#11
0
        public bool UnsubscribeEventHandlerFrom(TState stateId, IStateEventHandler eventHandler)
        {
            ValidateHasStateWithId(stateId);

            if (_stateEventHandlers.ContainsKey(stateId))
            {
                _stateEventHandlers[stateId].Remove(eventHandler);

                if (_stateEventHandlers[stateId].Count == 0)
                {
                    _stateEventHandlers.Remove(stateId);
                }

                return(true);
            }

            return(false);
        }
示例#12
0
 public bool ContainsEventHandlerOn(TState stateId, IStateEventHandler eventHandler)
 {
     return(_eventHandlers.ContainsEventHandlerOn(stateId, eventHandler));
 }
示例#13
0
 public bool UnsubscribeEventHandlerFrom(TState stateId, IStateEventHandler eventHandler)
 {
     return(_hierarchicalEventDispatcher.RemoveEventHandlerFrom(stateId, eventHandler));
 }
示例#14
0
        public void AddEventHandlerTo(TState stateId, IStateEventHandler eventHandler)
        {
            ValidateContainsState(stateId);

            _eventHandlers.AddEventHandlerTo(stateId, eventHandler);
        }
示例#15
0
 public bool HasEventHandlerOn(TState stateId, IStateEventHandler eventHandler)
 {
     return(_hierarchicalEventDispatcher.HasEventHandlerOn(stateId, eventHandler));
 }
示例#16
0
 public bool RemoveEventHandlerFrom(TState stateId, IStateEventHandler eventHandler)
 {
     return(_eventHandlers.RemoveEventHandlerFrom(stateId, eventHandler));
 }
示例#17
0
 public bool HasEventHandlerOn(TState stateId, IStateEventHandler eventListener)
 {
     return(_stateEventHandlers.ContainsKey(stateId) && _stateEventHandlers[stateId].Contains(eventListener));
 }
示例#18
0
 public void SubscribeEventHandlerTo(TState stateId, IStateEventHandler eventHandler)
 {
     _hierarchicalEventDispatcher.AddEventHandlerTo(stateId, eventHandler);
 }