Hi.
I have an FSM with some composite state. This composit state contatain 3 nested state. I would like to define internalTransition on "root" (outter) state and apply some action. I am expection that if FSM is in one of nested state and it receive event defined into internalTranstion on root event, it will react/handle such event.
But in my case FSM ignore event defined in internalTransition defined for parent state.
Piece of definition of my FSM:
// OPERATIONAL
builder.transition()
.from(PortFsmState.OPERATIONAL).to(PortFsmState.UNOPERATIONAL).on(PortFsmEvent.OFFLINE);
builder.transition()
.from(PortFsmState.OPERATIONAL).to(PortFsmState.FINISH).on(PortFsmEvent.PORT_DEL);
builder.internalTransition().within(PortFsmState.OPERATIONAL).on(PortFsmEvent.FAIL)
.callMethod("proxyFail");
builder.defineSequentialStatesOn(PortFsmState.OPERATIONAL,
PortFsmState.UNKNOWN, PortFsmState.UP, PortFsmState.DOWN);
// UNKNOWN
builder.transition()
.from(PortFsmState.UNKNOWN).to(PortFsmState.UP).on(PortFsmEvent.PORT_UP);
builder.transition()
.from(PortFsmState.UNKNOWN).to(PortFsmState.DOWN).on(PortFsmEvent.PORT_DOWN);
// UP
builder.transition()
.from(PortFsmState.UP).to(PortFsmState.DOWN).on(PortFsmEvent.PORT_DOWN);
builder.internalTransition().within(PortFsmState.UP).on(PortFsmEvent.DISCOVERY)
.callMethod("proxyDiscovery");
builder.onEntry(PortFsmState.UP)
.callMethod("enableDiscoveryPoll");
builder.onExit(PortFsmState.UP)
.callMethod("disableDiscoveryPoll");
// DOWN
builder.transition()
.from(PortFsmState.DOWN).to(PortFsmState.UP).on(PortFsmEvent.PORT_UP);
builder.onEntry(PortFsmState.DOWN)
.callMethod("downEnter");
And piece of log when FSM is in state UP and receive FAIL event:
March 4th 2019, 18:19:01.203 INFO PortFsm(6VX16SvZD1): Transition from "UP" on "FAIL" with context "PortFsm.PortFsmContext(output=null, history=null, speakerDiscoveryEvent=null)" begin. org.squirrelframework.foundation.fsm.StateMachineLogger
March 4th 2019, 18:19:01.203 WARN PortFsm(6VX16SvZD1): Transition from "UP" on "FAIL" declined. org.squirrelframework.foundation.fsm.StateMachineLogger
Is it a bug in my FSM definition? Or I treat README incorrectly and this event should not be handled? Or this is a bug in framework?