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_statem
documentation.We model a code lock as a state machine. This example demonstrates the following features:
StateMessageHandler
allows you do register a message for a specific state. Here for example we register thehandleButtonPress
handler that receives theButtonPress
message in theopen
state.StateCallHandler
similar toStateMessageHandler
but represents a synchronous call with a return value. In this example we register aStateCallHandler
to query the length of the code.StateEnterCallback
allows for a callback that is triggered on every state transition. This is useful for orthogonal concerns like logging, auditing etc.StateTimeout
provides 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 theopen
state. After 10 seconds in this state the state machine automatically moves to thelocked
state.MessageTimeout
is useful for measuring inactivity. We set up a message timeout after pressing each button. After 30 seconds of inactivity the buttons are cleared. AMessageTimeout
timer is canceled by any type of message or event.See ergo-services/ergo#218