[1.44 MSM meta state machine] accessing objects from actions

Hi all, what is the recommended way to use objects with an MSM state machine? I've written a state machine that handles sending data via UDP (asio). I'm using the functor front end and I have a 'send' action: struct a_send { template <typename Event, typename Fsm, typename S, typename T> void operator()(Event const& evt, Fsm &fsm, S&, T&) { // get next object from queue and post it to asio } }; My question is, how are actions supposed to access the objects that the state machine should work with? Currently my queue object is a member of the state machine itself, so I can write struct Send_ : public msm::front::state_machine_def<Send_> { string m_next_line_to_send; socket m_socket; string get_next_send_line(); }; and in my a_send action void operator()(Event &const &evt, Fsm &fsm, S&, T&) { fsm.m_next_line_to_send=fsm.get_next_send_line(); fsm.m_socket.async_write(fsm.m_next_line_to_send); } This works well as long as I am not using sub-statemachines. Here is my problem: I would like to use a substate machine for the actual sending. The main state machine has the states Disconnected, Working, Error, Shutdown. The Working state should actually be a substate machine. The problem is, when a_send gets called by the substate machine Working, the fsm object is of type Working. How can I access the member variables of the parent of a substate machine? Or is there a better way of accessing the objects the state machine should work with from actions? The tutorial explains state machines very nicely with the example of a CD player. But all the actions are empty and nowhere is explained, how you would actually access a CD player member variable or other such object so that you could actually manipulate the player to do something. Regards and thanks Hajo
participants (1)
-
Hajo Kirchhoff