Demo for usage of StateMachine #8
Draft
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Example for the usage of
act.StateMachine. This example is inspired by the code lock example from thegen_statemdocumentation.We model a code lock as a state machine. This example demonstrates the following features:
StateMessageHandlerallows you do register a message for a specific state. Here for example we register thehandleButtonPresshandler that receives theButtonPressmessage in theopenstate.StateCallHandlersimilar toStateMessageHandlerbut represents a synchronous call with a return value. In this example we register aStateCallHandlerto query the length of the code.StateEnterCallbackallows for a callback that is triggered on every state transition. This is useful for orthogonal concerns like logging, auditing etc.StateTimeoutprovides a timer that sends a message to the state machine on timeout. If the state machine transitions to another state before the timeout, the timer is canceled. In this example we set a state timeout for theopenstate. After 10 seconds in this state the state machine automatically moves to thelockedstate.MessageTimeoutis useful for measuring inactivity. We set up a message timeout after pressing each button. After 30 seconds of inactivity the buttons are cleared. AMessageTimeouttimer is canceled by any type of message or event.See ergo-services/ergo#218