rad  2.0.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | List of all members
rad::CoroActivity< CORO, Args > Class Template Reference

#include <coroActivity.hpp>

Inheritance diagram for rad::CoroActivity< CORO, Args >:
scxml4cpp::Activity scxml4cpp::Activity

Public Member Functions

 CoroActivity (std::string const &id, boost::asio::io_context &io_ctx, Args...args)
 
void start () override
 
void stop () override
 
 CoroActivity (std::string const &id, boost::asio::io_context &io_ctx, Args...args)
 
void start () override
 
void stop () override
 
- Public Member Functions inherited from scxml4cpp::Activity
 Activity (const std::string &id)
 
virtual ~Activity ()
 
std::string getId () const
 
void setId (const std::string &id)
 
 Activity (const std::string &id)
 
virtual ~Activity ()
 
std::string getId () const
 
void setId (const std::string &id)
 
 Activity (const std::string &id)
 
virtual ~Activity ()
 
std::string getId () const
 
void setId (const std::string &id)
 

Detailed Description

template<class CORO, class... Args>
class rad::CoroActivity< CORO, Args >

Due to the nature of asynchronous operations in ASIO in that a cancellation is not guaranteed to not invoke a registered handler, they need to have a guaranteed lifetime. The coroutines also needs overlapping lifetimes for when an activity is stopped, but not yet deleted and started again.

The solution is to create a new shared object instance for each start and delegating cancellation to this object. This makes CoroActivity a coroutine factory of sorts.

Constructor & Destructor Documentation

template<class CORO, class... Args>
rad::CoroActivity< CORO, Args >::CoroActivity ( std::string const &  id,
boost::asio::io_context &  io_ctx,
Args...  args 
)
inlineexplicit

Create CoroActivity

template<class CORO, class... Args>
rad::CoroActivity< CORO, Args >::CoroActivity ( std::string const &  id,
boost::asio::io_context &  io_ctx,
Args...  args 
)
inlineexplicit

Create CoroActivity

Member Function Documentation

template<class CORO, class... Args>
void rad::CoroActivity< CORO, Args >::start ( )
inlineoverridevirtual

Starts the activity by creating a new coroutine instance that provides the activity behaviour.

Implements scxml4cpp::Activity.

template<class CORO, class... Args>
void rad::CoroActivity< CORO, Args >::start ( )
inlineoverridevirtual

Starts the activity by creating a new coroutine instance that provides the activity behaviour.

Implements scxml4cpp::Activity.

template<class CORO, class... Args>
void rad::CoroActivity< CORO, Args >::stop ( )
inlineoverridevirtual

Cancels coroutine, but does not guarantee that it's deleted since it might have an operation scheduled but not yet executed by asio. For this reason the implementation of CORO should cancel all its asynchronous activities and make sure not to perform any observable side effects.

Implements scxml4cpp::Activity.

template<class CORO, class... Args>
void rad::CoroActivity< CORO, Args >::stop ( )
inlineoverridevirtual

Cancels coroutine, but does not guarantee that it's deleted since it might have an operation scheduled but not yet executed by asio. For this reason the implementation of CORO should cancel all its asynchronous activities and make sure not to perform any observable side effects.

Implements scxml4cpp::Activity.


The documentation for this class was generated from the following files: