C++ Actor Framework
0.18
|
An co-existing actor forwarding all messages through a user-defined callback to another object, thus serving as gateway to allow any object to interact with other actors. More...
#include <actor_companion.hpp>
Public Types | |
using | signatures = none_t |
Required by spawn for type deduction. | |
using | behavior_type = behavior |
Required by spawn for type deduction. | |
using | lock_type = detail::shared_spinlock |
A shared lockable. | |
using | enqueue_handler = std::function< void(mailbox_element_ptr)> |
Delegates incoming messages to user-defined event loop. | |
using | on_exit_handler = std::function< void()> |
Callback for actor termination. | |
![]() | |
using | clock_type = std::chrono::steady_clock |
Defines a monotonic clock suitable for measuring intervals. | |
Public Member Functions | |
actor_companion (actor_config &cfg) | |
void | enqueue (mailbox_element_ptr ptr, execution_unit *host) override |
Enqueues a new message wrapped in a mailbox_element to the actor. More... | |
void | enqueue (strong_actor_ptr src, message_id mid, message content, execution_unit *eu) override |
Enqueues a new message without forwarding stack to the channel. | |
void | launch (execution_unit *eu, bool lazy, bool hide) override |
void | on_exit () override |
Can be overridden to perform cleanup code after an actor finished execution. More... | |
void | disconnect (exit_reason rsn=exit_reason::normal) |
Removes the handler for incoming messages and terminates the companion for exit reason rsn . More... | |
void | on_enqueue (enqueue_handler handler) |
Sets the handler for incoming messages. More... | |
void | on_exit (on_exit_handler handler) |
Sets the handler for incoming messages. | |
![]() | |
local_actor (actor_config &cfg) | |
void | on_destroy () override |
Cleans up any remaining state before the destructor is called. More... | |
void | setup_metrics () |
clock_type::time_point | now () const noexcept |
Returns the current time. | |
void | request_response_timeout (timespan d, message_id mid) |
Requests a new timeout for mid . More... | |
template<class T , spawn_options Os = no_spawn_options, class... Ts> | |
infer_handle_from_class_t< T > | spawn (Ts &&... xs) |
template<spawn_options Os = no_spawn_options, class F , class... Ts> | |
infer_handle_from_fun_t< F > | spawn (F fun, Ts &&... xs) |
template<class T , spawn_options Os = no_spawn_options, class Groups , class... Ts> | |
actor | spawn_in_groups (const Groups &gs, Ts &&... xs) |
template<class T , spawn_options Os = no_spawn_options, class... Ts> | |
actor | spawn_in_groups (std::initializer_list< group > gs, Ts &&... xs) |
template<class T , spawn_options Os = no_spawn_options, class... Ts> | |
actor | spawn_in_group (const group &grp, Ts &&... xs) |
template<spawn_options Os = no_spawn_options, class Groups , class F , class... Ts> | |
actor | spawn_in_groups (const Groups &gs, F fun, Ts &&... xs) |
template<spawn_options Os = no_spawn_options, class F , class... Ts> | |
actor | spawn_in_groups (std::initializer_list< group > gs, F fun, Ts &&... xs) |
template<spawn_options Os = no_spawn_options, class F , class... Ts> | |
actor | spawn_in_group (const group &grp, F fun, Ts &&... xs) |
void | send_exit (const actor_addr &whom, error reason) |
Sends an exit message to whom . | |
void | send_exit (const strong_actor_ptr &whom, error reason) |
Sends an exit message to whom . | |
template<class ActorHandle > | |
void | send_exit (const ActorHandle &whom, error reason) |
Sends an exit message to whom . | |
execution_unit * | context () const noexcept |
Returns the execution unit currently used by this actor. | |
void | context (execution_unit *x) noexcept |
Sets the execution unit for this actor. | |
actor_system & | system () const noexcept |
Returns the hosting actor system. | |
const actor_system_config & | config () const noexcept |
Returns the config of the hosting actor system. | |
actor_clock & | clock () const noexcept |
Returns the clock of the actor system. | |
strong_actor_ptr & | current_sender () noexcept |
Returns a pointer to the sender of the current message. More... | |
message_id | current_message_id () noexcept |
Returns the ID of the current message. | |
message_id | take_current_message_id () noexcept |
Returns the ID of the current message and marks the ID stored in the current mailbox element as answered. More... | |
void | drop_current_message_id () noexcept |
Marks the current message ID as answered. | |
strong_actor_ptr | current_next_stage () noexcept |
Returns a pointer to the next stage from the forwarding path of the current message or nullptr if the path is empty. More... | |
strong_actor_ptr | take_current_next_stage () |
Returns a pointer to the next stage from the forwarding path of the current message and removes it from the path. More... | |
const mailbox_element::forwarding_stack & | current_forwarding_stack () noexcept |
Returns the forwarding stack from the current mailbox element. | |
mailbox_element::forwarding_stack | take_current_forwarding_stack () noexcept |
Moves the forwarding stack from the current mailbox element. | |
mailbox_element * | current_mailbox_element () noexcept |
Returns a pointer to the currently processed mailbox element. | |
void | monitor (const node_id &node) |
Adds a unidirectional monitor to node . More... | |
template<message_priority P = message_priority::normal, class Handle > | |
void | monitor (const Handle &whom) |
Adds a unidirectional monitor to whom . More... | |
void | demonitor (const actor_addr &whom) |
Removes a monitor from whom . | |
void | demonitor (const strong_actor_ptr &whom) |
Removes a monitor from whom . | |
void | demonitor (const node_id &node) |
Removes a monitor from node . | |
template<class Handle > | |
void | demonitor (const Handle &whom) |
Removes a monitor from whom . | |
template<class... Ts> | |
detail::response_promise_t< Ts... > | make_response_promise () |
Creates a typed_response_promise to respond to a request later on. More... | |
response_promise | make_response_promise () |
Creates a response_promise to respond to a request later on. | |
template<class... Ts> | |
detail::response_promise_t< std::decay_t< Ts >... > | response (Ts &&... xs) |
const char * | name () const override |
Returns an implementation-dependent name for logging purposes, which is only valid as long as the actor is running. More... | |
virtual error | save_state (serializer &sink, unsigned int version) |
Serializes the state of this actor to sink . More... | |
virtual error | load_state (deserializer &source, unsigned int version) |
Deserializes the state of this actor from source . More... | |
const error & | fail_state () const noexcept |
Returns the currently defined fail state. More... | |
![]() | |
void | attach (attachable_ptr ptr) override |
Attaches ptr to this actor. More... | |
size_t | detach (const attachable::token &what) override |
Detaches the first attached object that matches what . | |
void | link_to (const actor_addr &x) |
Links this actor to x . | |
template<class ActorHandle > | |
void | link_to (const ActorHandle &x) |
Links this actor to x . | |
void | unlink_from (const actor_addr &x) |
Unlinks this actor from x . | |
template<class ActorHandle > | |
void | unlink_from (const ActorHandle &x) |
Links this actor to x . | |
![]() | |
void * | operator new (std::size_t, void *ptr) |
actor_control_block * | ctrl () const |
template<class F > | |
void | attach_functor (F f) |
Convenience function that attaches the functor f to this actor. More... | |
actor_addr | address () const noexcept |
Returns the logical actor address. | |
virtual std::set< std::string > | message_types () const |
Returns the set of accepted messages types as strings or an empty set if this actor is untyped. More... | |
actor_id | id () const noexcept |
Returns the ID of this actor. | |
node_id | node () const noexcept |
Returns the node this actor is living on. | |
actor_system & | home_system () const noexcept |
Returns the system that created this actor (or proxy). | |
![]() | |
bool | is_abstract_actor () const |
bool | is_abstract_group () const |
bool | is_actor_decorator () const |
Additional Inherited Members | |
![]() | |
static constexpr int | is_abstract_actor_flag = 0x01000000 |
static constexpr int | is_abstract_group_flag = 0x02000000 |
static constexpr int | is_actor_bind_decorator_flag = 0x04000000 |
static constexpr int | is_actor_dot_decorator_flag = 0x08000000 |
static constexpr int | is_actor_decorator_mask = 0x0C000000 |
static constexpr int | is_hidden_flag = 0x10000000 |
![]() | |
virtual void | on_cleanup (const error &reason) |
Allows subclasses to add additional cleanup code to the critical section in cleanup . More... | |
void | bounce (mailbox_element_ptr &what) |
Sends a response message if what is a request. | |
void | bounce (mailbox_element_ptr &what, const error &err) |
Sends a response message if what is a request. | |
monitorable_actor (actor_config &cfg) | |
Creates a new actor instance. | |
void | attach_impl (attachable_ptr &ptr) |
size_t | detach_impl (const attachable::token &what, bool stop_on_hit=false, bool dry_run=false) |
bool | handle_system_message (mailbox_element &x, execution_unit *ctx, bool trap_exit) |
template<class F > | |
bool | handle_system_message (mailbox_element &x, execution_unit *context, bool trap_exit, F &down_msg_handler) |
![]() | |
abstract_actor (actor_config &cfg) | |
Creates a new actor instance. | |
![]() | |
int | flags () const |
void | flags (int new_value) |
![]() | |
execution_unit * | context_ |
mailbox_element * | current_element_ |
message_id | last_request_id_ |
detail::unique_function< behavior(local_actor *)> | initial_behavior_fac_ |
Factory function for returning initial behavior in function-based actors. | |
metrics_t | metrics_ |
![]() | |
error | fail_state_ |
std::condition_variable | cv_ |
attachable_ptr | attachables_head_ |
![]() | |
std::mutex | mtx_ |
![]() | |
constexpr keep_behavior_t | keep_behavior = keep_behavior_t{} |
Policy tag that causes event_based_actor::become to keep the current behavior available. | |
![]() | |
using | actor_id = uint64_t |
A unique actor ID. | |
An co-existing actor forwarding all messages through a user-defined callback to another object, thus serving as gateway to allow any object to interact with other actors.
void caf::actor_companion::disconnect | ( | exit_reason | rsn = exit_reason::normal | ) |
Removes the handler for incoming messages and terminates the companion for exit reason rsn
.
|
overridevirtual |
Enqueues a new message wrapped in a mailbox_element
to the actor.
This enqueue
variant allows to define forwarding chains.
Implements caf::abstract_actor.
void caf::actor_companion::on_enqueue | ( | enqueue_handler | handler | ) |
Sets the handler for incoming messages.
handler
needs to be thread-safe
|
overridevirtual |
Can be overridden to perform cleanup code after an actor finished execution.
Reimplemented from caf::local_actor.