private void ProcessEvent(FSMBase.Event <TData> fsmEvent, object source) { if (_debugEvent) { var srcStr = GetSourceString(source); _log.Debug("processing {0} from {1} in state {2}", fsmEvent, srcStr, StateName); } var stateFunc = _stateFunctions[_currentState.StateName]; var oldState = _currentState; State <TState, TData, TEvent> upcomingState = null; if (stateFunc != null) { upcomingState = stateFunc(fsmEvent); } if (upcomingState == null) { upcomingState = HandleEvent(fsmEvent); } ApplyState(upcomingState); if (_debugEvent && !Equals(oldState, upcomingState)) { _log.Debug("transition {0} -> {1}", oldState, upcomingState); } }
private void ProcessMsg(object any, object source) { var fsmEvent = new FSMBase.Event <TData>(any, _currentState.StateData); ProcessEvent(fsmEvent, source); }