7 #ifndef RAD_COROACTIVITY_HPP
8 #define RAD_COROACTIVITY_HPP
10 #define BOOST_COROUTINES_NO_DEPRECATION_WARNING
14 #include <scxml4cpp/Activity.h>
15 #include <boost/asio/io_context.hpp>
16 #include <boost/asio/spawn.hpp>
22 template <
class T,
class... Args, std::size_t... Is>
24 return std::make_shared<T>(std::get<Is>(t)...);
29 template <
class T,
class... Args>
31 return detail::MakeSharedFromTupleImpl<T>(args, std::index_sequence_for<Args...>{});
43 template <
class CORO,
class... Args>
49 explicit CoroActivity(std::string
const&
id, boost::asio::io_context& io_ctx, Args... args)
50 : scxml4cpp::
Activity(id), m_io_ctx(io_ctx), m_args(args...) {}
60 boost::asio::spawn(m_io_ctx,
61 [&](boost::asio::yield_context yield) { m_coro->operator()(yield); });
79 boost::asio::io_context& m_io_ctx;
80 std::tuple<Args...> m_args;
81 std::shared_ptr<CORO> m_coro;
85 #endif // #ifndef RAD_COROACTIVITY_HPP
Definition: coroActivity.hpp:44
CoroActivity(std::string const &id, boost::asio::io_context &io_ctx, Args...args)
Definition: coroActivity.hpp:49
Activity(const std::string &id)
Definition: Activity.cpp:33
Definition: Activity.h:39
std::shared_ptr< T > MakeSharedFromTupleImpl(std::tuple< Args...> &t, std::index_sequence< Is...>)
Definition: coroActivity.hpp:23
std::shared_ptr< T > MakeSharedFromTuple(std::tuple< Args...> &args)
Definition: coroActivity.hpp:30
void start() override
Definition: coroActivity.hpp:56
void stop() override
Definition: coroActivity.hpp:70