[msm] nested pseudo exits with same event ending up in no trans in the most outer state machine.

Hi All
I have run in to the following problem : if I have 3 state machines where 1st has a composite state which has one more composite state than the most inner one enters to a pseudo exit state which sends finish event. The middle one has a transaction from the most inner pseudo exit with even finish to a pseudo exit middle state which sends finish again. The most outer state machine has a transition from the middle pseudo exit with event finish to a internal state. when the most inner pseudo state sends event finish it ends in a NO transition on the most outer state machine instead of triggering the transition in the middle state machine. <snip>
Hi Richard, Remove these lines: //struct test1 : msm::back::state_machine< test1Sm > //{ //}; //typedef test1 Test1Player; And replace them with: typedef msm::back::state_machine< test1Sm > Test1Player; And it should work. Regards, Christophe

Hi Christophe humm...... but In our design We actually do thinks in the constructor of the back end. and We use multiple inheritance as well where derived is inherited from msm:backend and some other base classes to couple MSM with our existing message dispatching FW and call process_event. Is it not allowed to use derived classes as backends ?. I was not a ware of it. Is it mentioned in the documentation ? It gives me a lot headache to change our design now ... :(. we have spent now about 2 man month altogether to implement base classes around msm now if this is a case I have to change all of it. is there a way to allow such a implementation ?. Br. Richie On 19 July 2010 11:28, Christophe Henry <christophe.j.henry@googlemail.com> wrote:
Hi All
I have run in to the following problem : if I have 3 state machines where 1st has a composite state which has one more composite state than the most inner one enters to a pseudo exit state which sends finish event. The middle one has a transaction from the most inner pseudo exit with even finish to a pseudo exit middle state which sends finish again. The most outer state machine has a transition from the middle pseudo exit with event finish to a internal state. when the most inner pseudo state sends event finish it ends in a NO transition on the most outer state machine instead of triggering the transition in the middle state machine. <snip>
Hi Richard,
Remove these lines:
//struct test1 : msm::back::state_machine< test1Sm > //{ //}; //typedef test1 Test1Player;
And replace them with:
typedef msm::back::state_machine< test1Sm > Test1Player;
And it should work.
Regards, Christophe _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Hi again Christophe If only composite state machines can not be derived classes of msm:backend than this is fine because I had only one place till now which I have changed already. And if there is no other side effects. We can live with it. Thanks. Br. Richie On 19 July 2010 19:34, Richard Szabo <sz.richard@googlemail.com> wrote:
Hi Christophe
humm......
but In our design We actually do thinks in the constructor of the back end.
and We use multiple inheritance as well where derived is inherited from msm:backend and some other base classes to couple MSM with our existing message dispatching FW and call process_event.
Is it not allowed to use derived classes as backends ?.
I was not a ware of it. Is it mentioned in the documentation ?
It gives me a lot headache to change our design now ... :(. we have spent now about 2 man month altogether to implement base classes around msm now if this is a case I have to change all of it.
is there a way to allow such a implementation ?.
Br. Richie
On 19 July 2010 11:28, Christophe Henry <christophe.j.henry@googlemail.com> wrote:
Hi All
I have run in to the following problem : if I have 3 state machines where 1st has a composite state which has one more composite state than the most inner one enters to a pseudo exit state which sends finish event. The middle one has a transaction from the most inner pseudo exit with even finish to a pseudo exit middle state which sends finish again. The most outer state machine has a transition from the middle pseudo exit with event finish to a internal state. when the most inner pseudo state sends event finish it ends in a NO transition on the most outer state machine instead of triggering the transition in the middle state machine. <snip>
Hi Richard,
Remove these lines:
//struct test1 : msm::back::state_machine< test1Sm > //{ //}; //typedef test1 Test1Player;
And replace them with:
typedef msm::back::state_machine< test1Sm > Test1Player;
And it should work.
Regards, Christophe _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
participants (2)
-
Christophe Henry
-
Richard Szabo