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<class Fsm, class Event, class SourceState, class TargetState> 
  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