[MSM] What happens to MSM if guard returns `false`, mutable events and error recovery?
Hi *,
I am currently reading through the MSM docs and have one question, what
happens to MSM if guard returns `false`. Does the MSM enter an error state
in orthogonal region (http://www.boost.org/doc/
libs/1_64_0/libs/msm/doc/HTML/ch03s02.html#d0e577)? Even internals page
describes, what happens if guard returns `true`, but not a single word on
`false` case.
Regarding the const events: I am programming an MSM to proxy network
traffic and once a message with data was received it'll be analysed and
moved between different states. Message instances implement move semantics.
Currently, the MSM has an initial state `ready` where the `message_in`
event is handled. This event contains the message to be analysed. From my
current understanding I either have to make message field in `message_in`
event mutable or MSM needs to to support r-value references. Can somebody
tell me what's going to happen if the action only accepts r-value reference
to an event instance? Currently, it seems to work, but would like to
understand the implications.
struct some_action_impl {
template
what happens to MSM if guard returns `false`
If the guard returns false, then the state transition and transition action do not happen. This is not an error, it's expected behaviour.
Regarding the const events
If you want event data to be mutable, pass a reference to mutable data in the immutable event object. If the lifetime of the mutable data is nondeterministic, hold a shared_ptr to shared mutable state in the event object. On 28 May 2017 at 08:42, Ovanes Markarian via Boost-users < boost-users@lists.boost.org> wrote:
Hi *,
I am currently reading through the MSM docs and have one question, what happens to MSM if guard returns `false`. Does the MSM enter an error state in orthogonal region (http://www.boost.org/doc/libs /1_64_0/libs/msm/doc/HTML/ch03s02.html#d0e577)? Even internals page describes, what happens if guard returns `true`, but not a single word on `false` case.
Regarding the const events: I am programming an MSM to proxy network traffic and once a message with data was received it'll be analysed and moved between different states. Message instances implement move semantics. Currently, the MSM has an initial state `ready` where the `message_in` event is handled. This event contains the message to be analysed. From my current understanding I either have to make message field in `message_in` event mutable or MSM needs to to support r-value references. Can somebody tell me what's going to happen if the action only accepts r-value reference to an event instance? Currently, it seems to work, but would like to understand the implications.
struct some_action_impl { template
void operator()(Event&& ev, Fsm& fsm, SourceState& source, TargetState& target) { ... } } My last question relates to multi-threading. I understand that MSM manages internal states, would it be safe to create MSM as a thread-local storage and restart the thread-local MSM if the new request comes in? It's more about, what happens to MSM after an error state? Is calling stop(), start() members enough?
Many thanks for help, Ovanes
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org https://lists.boost.org/mailman/listinfo.cgi/boost-users
participants (2)
-
Ovanes Markarian
-
Richard Hodges