libcaf
0.15.5
|
A cooperatively scheduled, event-based actor implementation. More...
#include <scheduled_actor.hpp>
Public Types | |
using | stream_manager_ptr = intrusive_ptr< stream_manager > |
A reference-counting pointer to a stream_manager . | |
using | streams_map = std::unordered_map< stream_id, stream_manager_ptr > |
A container for associating stream IDs to handlers. | |
using | pending_response = std::pair< const message_id, behavior > |
The message ID of an outstanding response with its callback. | |
using | pointer = scheduled_actor * |
A pointer to a scheduled actor. | |
using | default_handler = std::function< result< message >(pointer, message_view &)> |
Function object for handling unmatched messages. | |
using | error_handler = std::function< void(pointer, error &)> |
Function object for handling error messages. | |
using | down_handler = std::function< void(pointer, down_msg &)> |
Function object for handling down messages. | |
using | exit_handler = std::function< void(pointer, exit_msg &)> |
Function object for handling exit messages. | |
using | exception_handler = std::function< error(pointer, std::exception_ptr &)> |
Function object for handling exit messages. | |
![]() | |
enum | resume_result { resume_later, awaiting_message, done, shutdown_execution_unit } |
Denotes the state in which a resumable returned from its last call to resume . More... | |
enum | subtype_t { unspecified, scheduled_actor, io_actor, function_object } |
Denotes common subtypes of resumable . More... | |
Public Member Functions | |
scheduled_actor (actor_config &cfg) | |
void | enqueue (mailbox_element_ptr ptr, execution_unit *eu) override |
const char * | name () const override |
void | launch (execution_unit *eu, bool lazy, bool hide) override |
bool | cleanup (error &&fail_state, execution_unit *host) override |
subtype_t | subtype () const override |
Returns a subtype hint for this object. More... | |
void | intrusive_ptr_add_ref_impl () override |
Add a strong reference count to this object. | |
void | intrusive_ptr_release_impl () override |
Remove a strong reference count from this object. | |
resume_result | resume (execution_unit *, size_t) override |
Resume any pending computation until it is either finished or needs to be re-scheduled later. More... | |
virtual proxy_registry * | proxy_registry_ptr () |
Returns a factory for proxies created and managed by this actor or nullptr . More... | |
void | quit (error x=error{}) |
Finishes execution of this actor after any currently running message handler is done. More... | |
void | set_default_handler (default_handler fun) |
Sets a custom handler for unexpected messages. | |
template<class F > | |
std::enable_if< std::is_convertible< F, std::function< result< message >type_erased_tuple &)> >::value >::type | set_default_handler (F fun) |
Sets a custom handler for unexpected messages. | |
void | set_error_handler (error_handler fun) |
Sets a custom handler for error messages. | |
template<class T > | |
auto | set_error_handler (T fun) -> decltype(fun(std::declval< error &>())) |
Sets a custom handler for error messages. | |
void | set_down_handler (down_handler fun) |
Sets a custom handler for down messages. | |
template<class T > | |
auto | set_down_handler (T fun) -> decltype(fun(std::declval< down_msg &>())) |
Sets a custom handler for down messages. | |
void | set_exit_handler (exit_handler fun) |
Sets a custom handler for error messages. | |
template<class T > | |
auto | set_exit_handler (T fun) -> decltype(fun(std::declval< exit_msg &>())) |
Sets a custom handler for exit messages. | |
void | set_exception_handler (exception_handler fun) |
Sets a custom exception handler for this actor. More... | |
template<class F > | |
std::enable_if< std::is_convertible< F, std::function< error(std::exception_ptr &)> >::value >::type | set_exception_handler (F f) |
Sets a custom exception handler for this actor. More... | |
stream_id | make_stream_id () |
Returns a new stream ID. | |
template<class Handle , class... Ts, class Init , class Getter , class ClosedPredicate , class ResHandler , class Scatterer = broadcast_scatterer< typename stream_source_trait_t<Getter>::output>> | |
annotated_stream< typename stream_source_trait_t< Getter >::output, Ts... > | make_source (const Handle &dest, std::tuple< Ts... > xs, Init init, Getter getter, ClosedPredicate pred, ResHandler res_handler, policy::arg< Scatterer > scatterer_type={}) |
Creates a new stream source and starts streaming to dest . More... | |
template<class Handle , class Init , class Getter , class ClosedPredicate , class ResHandler , class Scatterer = broadcast_scatterer< typename stream_source_trait_t<Getter>::output>> | |
stream< typename stream_source_trait_t< Getter >::output > | make_source (const Handle &dest, Init init, Getter getter, ClosedPredicate pred, ResHandler res_handler, policy::arg< Scatterer > scatterer_type={}) |
Creates a new stream source and starts streaming to dest . More... | |
template<class Init , class... Ts, class Getter , class ClosedPredicate , class Scatterer = broadcast_scatterer< typename stream_source_trait_t<Getter>::output>> | |
annotated_stream< typename stream_source_trait_t< Getter >::output, Ts... > | make_source (std::tuple< Ts... > xs, Init init, Getter getter, ClosedPredicate pred, policy::arg< Scatterer > scatterer_type={}) |
Creates a new stream source. More... | |
template<class Init , class Getter , class ClosedPredicate , class Scatterer = broadcast_scatterer< typename stream_source_trait_t<Getter>::output>> | |
stream< typename stream_source_trait_t< Getter >::output > | make_source (Init init, Getter getter, ClosedPredicate pred, policy::arg< Scatterer > scatterer_type={}) |
Creates a new stream source. More... | |
template<class In , class... Ts, class Init , class Fun , class Cleanup , class Gatherer = random_gatherer, class Scatterer = broadcast_scatterer<typename stream_stage_trait_t<Fun>::output>> | |
annotated_stream< typename stream_stage_trait_t< Fun >::output, Ts... > | make_stage (const stream< In > &in, std::tuple< Ts... > xs, Init init, Fun fun, Cleanup cleanup, policy::arg< Gatherer, Scatterer > policies={}) |
Creates a new stream stage. More... | |
template<class In , class Init , class Fun , class Cleanup , class Gatherer = random_gatherer, class Scatterer = broadcast_scatterer<typename stream_stage_trait_t<Fun>::output>> | |
stream< typename stream_stage_trait_t< Fun >::output > | make_stage (const stream< In > &in, Init init, Fun fun, Cleanup cleanup, policy::arg< Gatherer, Scatterer > policies={}) |
Creates a new stream stage. More... | |
template<class T , class In , class SuccessCallback , class... Ts> | |
stream_result< typename T::output_type > | make_sink_impl (const stream< In > &in, SuccessCallback f, Ts &&... xs) |
Creates a new stream sink of type T. More... | |
template<class In , class Init , class Fun , class Finalize , class Gatherer = random_gatherer, class Scatterer = terminal_stream_scatterer> | |
stream_result< typename stream_sink_trait_t< Fun, Finalize >::output > | make_sink (const stream< In > &in, Init init, Fun fun, Finalize finalize, policy::arg< Gatherer, Scatterer > policies={}) |
Creates a new stream sink. More... | |
streams_map & | streams () |
void | trigger_downstreams () |
Tries to send more data on all downstream paths. More... | |
void | enqueue (strong_actor_ptr sender, message_id mid, message msg, execution_unit *host) override |
virtual void | enqueue (mailbox_element_ptr what, execution_unit *host)=0 |
Enqueues a new message wrapped in a mailbox_element to the actor. More... | |
Static Public Member Functions | |
static void | default_error_handler (pointer ptr, error &x) |
static void | default_down_handler (pointer ptr, down_msg &x) |
static void | default_exit_handler (pointer ptr, exit_msg &x) |
static error | default_exception_handler (pointer ptr, std::exception_ptr &x) |
Related Functions | |
(Note that these are not member functions.) | |
result< message > | reflect (scheduled_actor *, message_view &) |
result< message > | reflect_and_quit (scheduled_actor *, message_view &) |
result< message > | print_and_drop (scheduled_actor *, message_view &) |
result< message > | drop (scheduled_actor *, message_view &) |
A cooperatively scheduled, event-based actor implementation.
This is the recommended base class for user-defined actors.
virtual void caf::abstract_actor::enqueue |
Enqueues a new message wrapped in a mailbox_element
to the actor.
This enqueue
variant allows to define forwarding chains.
stream_result<typename stream_sink_trait_t<Fun, Finalize>::output> caf::scheduled_actor::make_sink | ( | const stream< In > & | in, |
Init | init, | ||
Fun | fun, | ||
Finalize | finalize, | ||
policy::arg< Gatherer, Scatterer > | policies = {} |
||
) |
Creates a new stream sink.
current_mailbox_element()
is a stream_msg::open
handshake in | The input of the sink. |
init | Function object for initializing the state of the stage. |
fun | Function object for processing stream elements. |
finalize | Function object for producing the final result. |
policies | Sets the policies for up- and downstream communication. |
stream_manager
. stream_result<typename T::output_type> caf::scheduled_actor::make_sink_impl | ( | const stream< In > & | in, |
SuccessCallback | f, | ||
Ts &&... | xs | ||
) |
Creates a new stream sink of type T.
current_mailbox_element()
is a stream_msg::open
handshake in | The input of the sink. |
f | Callback for initializing the object after successful creation. |
xs | Parameter pack for creating the instance of T. |
stream_manager
. annotated_stream<typename stream_source_trait_t<Getter>::output, Ts...> caf::scheduled_actor::make_source | ( | const Handle & | dest, |
std::tuple< Ts... > | xs, | ||
Init | init, | ||
Getter | getter, | ||
ClosedPredicate | pred, | ||
ResHandler | res_handler, | ||
policy::arg< Scatterer > | scatterer_type = {} |
||
) |
Creates a new stream source and starts streaming to dest
.
dest | Actor handle to the stream destination. |
xs | User-defined handshake payload. |
init | Function object for initializing the state of the source. |
getter | Function object for generating messages for the stream. |
pred | Predicate returning true when the stream is done. |
res_handler | Function object for receiving the stream result. |
scatterer_type | Configures the policy for downstream communication. |
stream_manager
. stream<typename stream_source_trait_t<Getter>::output> caf::scheduled_actor::make_source | ( | const Handle & | dest, |
Init | init, | ||
Getter | getter, | ||
ClosedPredicate | pred, | ||
ResHandler | res_handler, | ||
policy::arg< Scatterer > | scatterer_type = {} |
||
) |
Creates a new stream source and starts streaming to dest
.
dest | Actor handle to the stream destination. |
init | Function object for initializing the state of the source. |
getter | Function object for generating messages for the stream. |
pred | Predicate returning true when the stream is done. |
res_handler | Function object for receiving the stream result. |
scatterer_type | Configures the policy for downstream communication. |
stream_manager
. annotated_stream<typename stream_source_trait_t<Getter>::output, Ts...> caf::scheduled_actor::make_source | ( | std::tuple< Ts... > | xs, |
Init | init, | ||
Getter | getter, | ||
ClosedPredicate | pred, | ||
policy::arg< Scatterer > | scatterer_type = {} |
||
) |
Creates a new stream source.
xs | User-defined handshake payload. |
init | Function object for initializing the state of the source. |
getter | Function object for generating messages for the stream. |
pred | Predicate returning true when the stream is done. |
scatterer_type | Configures the policy for downstream communication. |
stream_manager
. stream<typename stream_source_trait_t<Getter>::output> caf::scheduled_actor::make_source | ( | Init | init, |
Getter | getter, | ||
ClosedPredicate | pred, | ||
policy::arg< Scatterer > | scatterer_type = {} |
||
) |
Creates a new stream source.
init | Function object for initializing the state of the source. |
getter | Function object for generating messages for the stream. |
pred | Predicate returning true when the stream is done. |
scatterer_type | Configures the policy for downstream communication. |
stream_manager
. annotated_stream<typename stream_stage_trait_t<Fun>::output, Ts...> caf::scheduled_actor::make_stage | ( | const stream< In > & | in, |
std::tuple< Ts... > | xs, | ||
Init | init, | ||
Fun | fun, | ||
Cleanup | cleanup, | ||
policy::arg< Gatherer, Scatterer > | policies = {} |
||
) |
Creates a new stream stage.
current_mailbox_element()
is a stream_msg::open
handshake in | The input of the stage. |
xs | User-defined handshake payload. |
init | Function object for initializing the state of the stage. |
fun | Function object for processing stream elements. |
cleanup | Function object for clearing the stage of the stage. |
policies | Sets the policies for up- and downstream communication. |
stream_manager
. stream<typename stream_stage_trait_t<Fun>::output> caf::scheduled_actor::make_stage | ( | const stream< In > & | in, |
Init | init, | ||
Fun | fun, | ||
Cleanup | cleanup, | ||
policy::arg< Gatherer, Scatterer > | policies = {} |
||
) |
Creates a new stream stage.
current_mailbox_element()
is a stream_msg::open
handshake in | The input of the stage. |
init | Function object for initializing the state of the stage. |
fun | Function object for processing stream elements. |
cleanup | Function object for clearing the stage of the stage. |
policies | Sets the policies for up- and downstream communication. |
stream_manager
.
|
virtual |
Returns a factory for proxies created and managed by this actor or nullptr
.
Finishes execution of this actor after any currently running message handler is done.
This member function clears the behavior stack of the running actor and invokes on_exit()
. The actors does not finish execution if the implementation of on_exit()
sets a new behavior. When setting a new behavior in on_exit()
, one has to make sure to not produce an infinite recursion.
If on_exit()
did not set a new behavior, the actor sends an exit message to all of its linked actors, sets its state to exited and finishes execution.
In case this actor uses the blocking API, this member function unwinds the stack by throwing an actor_exited
exception.
|
overridevirtual |
Resume any pending computation until it is either finished or needs to be re-scheduled later.
Implements caf::resumable.
Reimplemented in caf::io::abstract_broker.
void caf::scheduled_actor::set_exception_handler | ( | exception_handler | fun | ) |
Sets a custom exception handler for this actor.
If multiple handlers are defined, only the functor that was added last is being executed.
std::enable_if< std::is_convertible< F, std::function<error (std::exception_ptr&)> >::value >::type caf::scheduled_actor::set_exception_handler | ( | F | f | ) |
Sets a custom exception handler for this actor.
If multiple handlers are defined, only the functor that was added last is being executed.
|
overridevirtual |
Returns a subtype hint for this object.
This allows an execution unit to limit processing to a specific set of resumables and delegate other subtypes to dedicated workers.
Reimplemented from caf::resumable.
Reimplemented in caf::io::abstract_broker.
void caf::scheduled_actor::trigger_downstreams | ( | ) |
Tries to send more data on all downstream paths.
Use this function to manually trigger batches in a source after receiving more data to send.
|
related |
Default handler function that simply drops messages.
|
related |
Default handler function that prints messages message via aout
and drops them afterwards.
|
related |
Default handler function that sends the message back to the sender.
|
related |
Default handler function that sends the message back to the sender and then quits.