C++ Actor Framework 1.0.0
|
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 | super = extended_base |
using | signatures = none_t |
Required by spawn for type deduction. | |
using | behavior_type = behavior |
Required by spawn for type deduction. | |
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. | |
Public Types inherited from caf::local_actor | |
using | clock_type = std::chrono::steady_clock |
Defines a monotonic clock suitable for measuring intervals. | |
Public Member Functions | |
bool | enqueue (mailbox_element_ptr ptr, scheduler *sched) override |
Enqueues a new message wrapped in a mailbox_element to the actor. | |
void | launch (scheduler *sched, bool lazy, bool hide) override |
void | on_exit () override |
Can be overridden to perform cleanup code after an actor finished execution. | |
void | disconnect (exit_reason rsn=exit_reason::normal) |
Removes the handler for incoming messages and terminates the companion for exit reason rsn . | |
void | on_enqueue (enqueue_handler handler) |
Sets the handler for incoming messages. | |
void | on_exit (on_exit_handler handler) |
Sets the handler for incoming messages. | |
template<class... Args> | |
auto | mail (Args &&... args) |
Starts a new message. | |
template<class T , class... Ts> | |
void | become (T &&arg, Ts &&... args) |
Changes the behavior of this actor. | |
void | unbecome () |
Removes the last added behavior. | |
Public Member Functions inherited from caf::local_actor | |
local_actor (actor_config &cfg) | |
void | on_cleanup (const error &) override |
Called from cleanup to perform extra cleanup actions for this actor. | |
void | setup_metrics () |
clock_type::time_point | now () const noexcept |
Returns the current time. | |
disposable | request_response_timeout (timespan d, message_id mid) |
Requests a new timeout for mid . | |
template<class... Args> | |
void | println (std::string_view fmt, Args &&... args) |
Adds a new line to stdout. | |
template<class... Args> | |
void | println (term color, std::string_view fmt, Args &&... args) |
Adds a new line to stdout. | |
template<class T , spawn_options Os = no_spawn_options, class... Ts> | |
infer_handle_from_class_t< T > | spawn (Ts &&... xs) |
template<spawn_options Options = no_spawn_options, class CustomSpawn , class... Args> | |
CustomSpawn::handle_type | spawn (CustomSpawn, Args &&... args) |
template<spawn_options Os = no_spawn_options, class F , class... Ts> | |
infer_handle_from_fun_t< F > | spawn (F fun, Ts &&... xs) |
void | send_exit (const actor_addr &receiver, error reason) |
Sends an exit message to receiver . | |
void | send_exit (const strong_actor_ptr &receiver, error reason) |
Sends an exit message to receiver . | |
template<class Handle > | |
void | send_exit (const Handle &receiver, error reason) |
Sends an exit message to receiver . | |
template<message_priority Priority = message_priority::normal, class Handle , class T , class... Ts> | |
void | anon_send (const Handle &receiver, T &&arg, Ts &&... args) |
template<message_priority Priority = message_priority::normal, class Handle , class T , class... Ts> | |
disposable | scheduled_anon_send (const Handle &receiver, actor_clock::time_point timeout, T &&arg, Ts &&... args) |
template<message_priority Priority = message_priority::normal, class Handle , class T , class... Ts> | |
disposable | delayed_anon_send (const Handle &receiver, actor_clock::duration_type timeout, T &&arg, Ts &&... args) |
scheduler * | context () const noexcept |
Returns the execution unit currently used by this actor. | |
void | context (scheduler *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. | |
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. | |
void | drop_current_message_id () noexcept |
Marks the current message ID as answered. | |
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 . | |
void | demonitor (const node_id &node) |
Removes a monitor from node . | |
template<class... Ts> | |
detail::response_promise_t< Ts... > | make_response_promise () |
Creates a typed_response_promise to respond to a request later on. | |
response_promise | make_response_promise () |
Creates a response_promise to respond to a request later on. | |
const char * | name () const override |
Returns an implementation-dependent name for logging purposes, which is only valid as long as the actor is running. | |
virtual error | save_state (serializer &sink, unsigned int version) |
Serializes the state of this actor to sink . | |
virtual error | load_state (deserializer &source, unsigned int version) |
Deserializes the state of this actor from source . | |
const error & | fail_state () const noexcept |
Returns the currently defined fail state. | |
Public Member Functions inherited from caf::abstract_actor | |
abstract_actor (const abstract_actor &)=delete | |
abstract_actor & | operator= (const abstract_actor &)=delete |
void | attach (attachable_ptr ptr) |
Attaches ptr to this actor. | |
template<class F > | |
void | attach_functor (F f) |
Convenience function that attaches the functor f to this actor. | |
size_t | detach (const attachable::token &what) |
Detaches the first attached object that matches what . | |
void | link_to (const actor_addr &other) |
Links this actor to other . | |
template<class ActorHandle > | |
void | link_to (const ActorHandle &other) |
Links this actor to other . | |
void | unlink_from (const actor_addr &other) |
Unlinks this actor from addr . | |
template<class ActorHandle > | |
void | unlink_from (const ActorHandle &other) |
Links this actor to hdl . | |
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. | |
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). | |
actor_control_block * | ctrl () const |
Returns the control block for this actor. | |
actor_addr | address () const noexcept |
Returns the logical actor address. | |
virtual mailbox_element * | peek_at_next_mailbox_element () |
Called by the testing DSL to peek at the next element in the mailbox. | |
bool | cleanup (error &&reason, scheduler *sched) |
Called by the runtime system to perform cleanup actions for this actor. | |
Additional Inherited Members | |
Protected Member Functions inherited from caf::local_actor | |
void | do_send (abstract_actor *receiver, message_priority priority, message &&msg) |
Sends msg as an asynchronous message to receiver . | |
disposable | do_scheduled_send (strong_actor_ptr receiver, message_priority priority, actor_clock::time_point timeout, message &&msg) |
Sends msg as an asynchronous message to receiver after the timeout. | |
void | do_anon_send (abstract_actor *receiver, message_priority priority, message &&msg) |
Sends msg as an asynchronous message to receiver without sender information. | |
disposable | do_scheduled_anon_send (strong_actor_ptr receiver, message_priority priority, actor_clock::time_point timeout, message &&msg) |
Sends msg as an asynchronous message to receiver after the timeout without sender information. | |
void | do_monitor (abstract_actor *ptr, message_priority prio) |
void | do_demonitor (const strong_actor_ptr &whom) |
Protected Member Functions inherited from caf::abstract_actor | |
virtual void | on_unreachable () |
Called on actor if the last strong reference to it expired without a prior call to quit(exit_reason::not_exited) . | |
int | flags () const |
void | flags (int new_value) |
bool | is_terminated () const noexcept |
Checks whether this actor has terminated. | |
abstract_actor (actor_config &cfg) | |
void | attach_impl (attachable_ptr &ptr) |
size_t | detach_impl (const attachable::token &what, bool stop_on_hit=false, bool dry_run=false) |
void | add_link (abstract_actor *other) |
Causes the actor to establish a link to other . | |
void | remove_link (abstract_actor *other) |
Causes the actor to remove any established link to other . | |
virtual bool | add_backlink (abstract_actor *other) |
Adds an entry to other to the link table of this actor. | |
virtual bool | remove_backlink (abstract_actor *other) |
Removes an entry to other from the link table of this actor. | |
Protected Attributes inherited from caf::local_actor | |
scheduler * | 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_ |
Protected Attributes inherited from caf::abstract_actor | |
std::atomic< int > | flags_ |
Holds several state and type flags. | |
std::mutex | mtx_ |
Guards members that may be subject to concurrent access . | |
std::condition_variable | cv_ |
Allows blocking actors to actively wait for incoming messages. | |
error | fail_state_ |
Stores the user-defined exit reason if this actor has finished execution. | |
attachable_ptr | attachables_head_ |
Points to the first attachable in the linked list of attachables (if any). | |
Related Symbols inherited from caf::local_actor | |
constexpr keep_behavior_t | keep_behavior = keep_behavior_t{} |
Policy tag that causes event_based_actor::become to keep the current behavior available. | |
Related Symbols inherited from caf::abstract_actor | |
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::become | ( | T && | arg, |
Ts &&... | args ) |
Changes the behavior of this actor.
|
overridevirtual |
Enqueues a new message wrapped in a mailbox_element
to the actor.
This enqueue
variant allows to define forwarding chains.
true
if the message has added to the mailbox, false
otherwise. In the latter case, the actor terminated and the message has been dropped. Once this function returns false
, it returns false
for all future invocations. true
. In particular when dealing with remote actors. Implements caf::abstract_actor.
|
overridevirtual |
Implements caf::local_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.
void caf::actor_companion::unbecome | ( | ) |
Removes the last added behavior.
Terminates the actor if there are no behaviors left.