boolean processEvent(Event e) { if (LOG.isDebugEnabled()) { LOG.debug("FSM-{}: Received event {}@{} in state {}@{}", getFsmId(), e.getClass().getSimpleName(), System.identityHashCode(e), state.getClass().getSimpleName(), System.identityHashCode(state)); } try { State newState = state.dispatch(e); if (newState != state) { setState(state, newState); return true; } } catch (Throwable t) { LOG.error("Caught throwable while handling event", t); errorDeferredEvents(t); } return false; }
fsm = new StateMachine.FsmImpl(fsmExecutor); fsm.setInitState(new DisconnectedState(fsm));
fsm = new StateMachine.FsmImpl(fsmExecutor); fsm.setInitState(new DisconnectedState(fsm));
@Override public void run() { boolean stateChanged = processEvent(e); while (stateChanged) { stateChanged = false; Queue<DeferrableEvent> prevDeferred = deferred; deferred = new ArrayDeque<>(); for (DeferrableEvent d : prevDeferred) { if (stateChanged) { deferred.add(d); } else if (processEvent(d)) { stateChanged = true; } } } } }
@Override public void run() { boolean stateChanged = processEvent(e); while (stateChanged) { stateChanged = false; Queue<DeferrableEvent> prevDeferred = deferred; deferred = new ArrayDeque<>(); for (DeferrableEvent d : prevDeferred) { if (stateChanged) { deferred.add(d); } else if (processEvent(d)) { stateChanged = true; } } } } }
boolean processEvent(Event e) { if (LOG.isDebugEnabled()) { LOG.debug("FSM-{}: Received event {}@{} in state {}@{}", getFsmId(), e.getClass().getSimpleName(), System.identityHashCode(e), state.getClass().getSimpleName(), System.identityHashCode(state)); } try { State newState = state.dispatch(e); if (newState != state) { setState(state, newState); return true; } } catch (Throwable t) { LOG.error("Caught throwable while handling event", t); errorDeferredEvents(t); } return false; }
@Override public Fsm newChildFsm() { return new FsmImpl(executor); }
@Override public Fsm newChildFsm() { return new FsmImpl(executor); }
@Override protected void finalize() throws Throwable { super.finalize(); LOG.debug("FSM-{}: Finalizing", getFsmId()); } }
@Override public void deferEvent(DeferrableEvent e) { if (LOG.isDebugEnabled()) { LOG.debug("FSM-{}: deferred {}@{}", getFsmId(), e.getClass().getSimpleName(), System.identityHashCode(e)); } deferred.add(e); }
void setState(final State curState, final State newState) { if (curState != state) { LOG.error("FSM-{}: Tried to transition from {} to {}, but current state is {}", getFsmId(), state, newState, curState); throw new IllegalArgumentException(); } state = newState; if (LOG.isDebugEnabled()) { LOG.debug("FSM-{}: State transition {} -> {}", getFsmId(), curState, newState); } }
@Override public void deferEvent(DeferrableEvent e) { if (LOG.isDebugEnabled()) { LOG.debug("FSM-{}: deferred {}@{}", getFsmId(), e.getClass().getSimpleName(), System.identityHashCode(e)); } deferred.add(e); }
void setState(final State curState, final State newState) { if (curState != state) { LOG.error("FSM-{}: Tried to transition from {} to {}, but current state is {}", getFsmId(), state, newState, curState); throw new IllegalArgumentException(); } state = newState; if (LOG.isDebugEnabled()) { LOG.debug("FSM-{}: State transition {} -> {}", getFsmId(), curState, newState); } }
@Override protected void finalize() throws Throwable { super.finalize(); LOG.debug("FSM-{}: Finalizing", getFsmId()); } }