C++ Actor Framework 1.0.0
Loading...
Searching...
No Matches
caf::local_actor Class Referenceabstract

Base class for actors running on this node, either living in an own thread or cooperatively scheduled. More...

#include <local_actor.hpp>

Inheritance diagram for caf::local_actor:
caf::abstract_actor caf::abstract_blocking_actor caf::abstract_blocking_actor caf::abstract_scheduled_actor caf::actor_companion caf::blocking_actor caf::io::typed_broker< Sigs >

Classes

struct  inbound_stream_metrics_t
 Optional metrics for inbound stream traffic collected by individual actors when configured to do so. More...
 
struct  metrics_t
 Optional metrics collected by individual actors when configured to do so. More...
 
struct  outbound_stream_metrics_t
 Optional metrics for outbound stream traffic collected by individual actors when configured to do so. More...
 

Public Types

using clock_type = std::chrono::steady_clock
 Defines a monotonic clock suitable for measuring intervals.
 

Public Member Functions

 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 ()
 
virtual void launch (scheduler *sched, bool lazy, bool hide)=0
 
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)
 
schedulercontext () const noexcept
 Returns the execution unit currently used by this actor.
 
void context (scheduler *x) noexcept
 Sets the execution unit for this actor.
 
actor_systemsystem () const noexcept
 Returns the hosting actor system.
 
const actor_system_configconfig () const noexcept
 Returns the config of the hosting actor system.
 
actor_clockclock () const noexcept
 Returns the clock of the actor system.
 
strong_actor_ptrcurrent_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.
 
virtual void on_exit ()
 Can be overridden to perform cleanup code after an actor finished execution.
 
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 errorfail_state () const noexcept
 Returns the currently defined fail state.
 
- Public Member Functions inherited from caf::abstract_actor
 abstract_actor (const abstract_actor &)=delete
 
abstract_actoroperator= (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_systemhome_system () const noexcept
 Returns the system that created this actor (or proxy).
 
actor_control_blockctrl () const
 Returns the control block for this actor.
 
actor_addr address () const noexcept
 Returns the logical actor address.
 
virtual bool enqueue (mailbox_element_ptr what, scheduler *sched)=0
 Enqueues a new message wrapped in a mailbox_element to the actor.
 
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.
 

Protected Member Functions

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

schedulercontext_
 
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).
 

Friends

class mail_cache
 

Related Symbols

(Note that these are not member symbols.)

constexpr keep_behavior_t keep_behavior = keep_behavior_t{}
 Policy tag that causes event_based_actor::become to keep the current behavior available.
 

Detailed Description

Base class for actors running on this node, either living in an own thread or cooperatively scheduled.

Member Function Documentation

◆ current_sender()

strong_actor_ptr & caf::local_actor::current_sender ( )
noexcept

Returns a pointer to the sender of the current message.

Precondition
current_mailbox_element() != nullptr

◆ do_anon_send()

void caf::local_actor::do_anon_send ( abstract_actor * receiver,
message_priority priority,
message && msg )
protected

Sends msg as an asynchronous message to receiver without sender information.

Parameters
receiverThe receiver for the message.
priorityThe priority for sending the message.
msgThe message to send.

◆ do_scheduled_anon_send()

disposable caf::local_actor::do_scheduled_anon_send ( strong_actor_ptr receiver,
message_priority priority,
actor_clock::time_point timeout,
message && msg )
protected

Sends msg as an asynchronous message to receiver after the timeout without sender information.

Parameters
receiverThe receiver for the message.
priorityThe priority for sending the message.
msgThe message to send.

◆ do_scheduled_send()

disposable caf::local_actor::do_scheduled_send ( strong_actor_ptr receiver,
message_priority priority,
actor_clock::time_point timeout,
message && msg )
protected

Sends msg as an asynchronous message to receiver after the timeout.

Parameters
receiverThe receiver for the message.
priorityThe priority for sending the message.
msgThe message to send.

◆ do_send()

void caf::local_actor::do_send ( abstract_actor * receiver,
message_priority priority,
message && msg )
protected

Sends msg as an asynchronous message to receiver.

Parameters
receiverThe receiver for the message.
priorityThe priority for sending the message.
msgThe message to send.

◆ fail_state()

const error & caf::local_actor::fail_state ( ) const
noexcept

Returns the currently defined fail state.

If this reason is not none then the actor will terminate with this error after executing the current message handler.

◆ load_state()

error caf::local_actor::load_state ( deserializer & source,
unsigned int version )
virtual

Deserializes the state of this actor from source.

This function is only called if this actor has set the is_serializable flag. The default implementation throws a std::logic_error.

◆ make_response_promise()

template<class... Ts>
detail::response_promise_t< Ts... > caf::local_actor::make_response_promise ( )

Creates a typed_response_promise to respond to a request later on.

make_response_promise<typed_response_promise<int, int>>() is equivalent to make_response_promise<int, int>().

◆ monitor()

void caf::local_actor::monitor ( const node_id & node)

Adds a unidirectional monitor to node.

Note
Each call to monitor creates a new, independent monitor.

◆ name()

const char * caf::local_actor::name ( ) const
overridevirtual

Returns an implementation-dependent name for logging purposes, which is only valid as long as the actor is running.

The default implementation simply returns "actor".

Implements caf::abstract_actor.

◆ on_cleanup()

void caf::local_actor::on_cleanup ( const error & reason)
overridevirtual

Called from cleanup to perform extra cleanup actions for this actor.

Reimplemented from caf::abstract_actor.

◆ on_exit()

void caf::local_actor::on_exit ( )
virtual

Can be overridden to perform cleanup code after an actor finished execution.

Reimplemented in caf::actor_companion.

◆ request_response_timeout()

disposable caf::local_actor::request_response_timeout ( timespan d,
message_id mid )

Requests a new timeout for mid.

Precondition
mid.is_request()

◆ save_state()

error caf::local_actor::save_state ( serializer & sink,
unsigned int version )
virtual

Serializes the state of this actor to sink.

This function is only called if this actor has set the is_serializable flag. The default implementation throws a std::logic_error.


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