On Mon, 8 Mar 2021 at 15:38, Andrea Fiorito via Boost-users < boost-users@lists.boost.org> wrote:
> Hi, I'm trying to use MSM to implement a client server component for my > app. The client is broadcasting a msg, that servers in a local network will > detect and respond. The client at that point will connect to one of the > servers and interact following the network protocol. For the network and > threading I'm using boost ASIO. > > I have 2 submachines that manage one the discovering part, and the other > the connection and dialogue with one server part. I found that would be > beneficial to run the submachines in one thread managed by an io_context, > with the idea of stopping that context to cancel all the asynchronous > operations. > > Unfortunately there are some weird behaviours with submachines, and not > getting if I missed the right way of doing things or else. the description > of my last stopper is here: > > https://github.com/boostorg/msm/issues/37 > > Is anyone able to point me on the right direction? > When I've done this in the past I've had most success by separating out the thread/asio code from the state definitions and storing it in the class that represents the state machine front end. All interaction with Asio takes place by a call to a method on the FSM. In this way you can insulate the state machine transitions from issues caused by threads or asynchronous callbacks by ensuring that every call to `process_event` happens in a function being executed by the strand. It also eases state transitions if you don't make the state machine worry about waiting for completion handlers to execute. You can keep a "generation counter" or "token" in the handler so that it becomes a NO-OP if the async operation is out of date. A partial example on godbolt: https://godbolt.org/z/TzY17h > > Regards, > Andrea > _______________________________________________ > Boost-users mailing list > Boost-users@lists.boost.org > https://lists.boost.org/mailman/listinfo.cgi/boost-users > -- Richard Hodges hodge...@gmail.com office: +442032898513 home: +376841522 mobile: +376380212
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org https://lists.boost.org/mailman/listinfo.cgi/boost-users