SObjectizer 5.8
Loading...
Searching...
No Matches
so_5::abstract_message_box_t Class Referenceabstract

Mail box class. More...

#include <mbox.hpp>

Inheritance diagram for so_5::abstract_message_box_t:
so_5::atomic_refcounted_t so_5::abstract_message_chain_t so_5::impl::local_mbox_template< Tracing_Base > so_5::impl::mpsc_mbox_template_t< Tracing_Base, Limits_Handling_Mixin > so_5::impl::named_local_mbox_t so_5::msg_tracing::impl::special_enveloping_mbox_t so_5::stats::impl::st_env_stuff::next_turn_mbox_t so_5::unique_subscribers_mbox_impl::actual_mbox_t< Mutex, Tracing_Base > so_5::mchain_props::mchain_template< Queue, Tracing_Base >

Public Member Functions

 abstract_message_box_t ()=default
 
virtual ~abstract_message_box_t () noexcept=default
 
virtual mbox_id_t id () const =0
 Unique ID of this mbox.
 
virtual void subscribe_event_handler (const std::type_index &type_index, abstract_message_sink_t &subscriber)=0
 Add the message handler.
 
virtual void unsubscribe_event_handler (const std::type_index &type_index, abstract_message_sink_t &subscriber) noexcept=0
 Remove all message handlers.
 
virtual std::string query_name () const =0
 Get the mbox name.
 
virtual mbox_type_t type () const =0
 Get the type of message box.
 
virtual void do_deliver_message (message_delivery_mode_t delivery_mode, const std::type_index &msg_type, const message_ref_t &message, unsigned int redirection_deep)=0
 Deliver message for all subscribers with respect to message limits.
 
virtual so_5::environment_tenvironment () const noexcept=0
 SObjectizer Environment for which the mbox is created.
 
Methods for working with delivery filters.
virtual void set_delivery_filter (const std::type_index &msg_type, const delivery_filter_t &filter, abstract_message_sink_t &subscriber)=0
 Set a delivery filter for message type and subscriber.
 
virtual void drop_delivery_filter (const std::type_index &msg_type, abstract_message_sink_t &subscriber) noexcept=0
 Removes delivery filter for message type and subscriber.
 

Private Member Functions

 abstract_message_box_t (const abstract_message_box_t &)=delete
 
 abstract_message_box_t (abstract_message_box_t &&)=delete
 
abstract_message_box_toperator= (const abstract_message_box_t &)=delete
 
abstract_message_box_toperator= (abstract_message_box_t &&)=delete
 

Friends

class intrusive_ptr_t< abstract_message_box_t >
 
class so_5::impl::mbox_iface_for_timers_t
 

Additional Inherited Members

- Protected Member Functions inherited from so_5::atomic_refcounted_t
 atomic_refcounted_t (const atomic_refcounted_t &)=delete
 
atomic_refcounted_toperator= (const atomic_refcounted_t &)=delete
 
 atomic_refcounted_t () noexcept
 Default constructor.
 
 ~atomic_refcounted_t () noexcept=default
 Destructor.
 
void inc_ref_count () noexcept
 Increments reference count.
 
unsigned long dec_ref_count () noexcept
 Decrement reference count.
 

Detailed Description

Mail box class.

The class serves as an interface for sending and receiving messages.

All mboxes can be created via the SObjectizer Environment. References to mboxes are stored and manipulated by so_5::mbox_t objects.

See also
environment_t::schedule_timer(), environment_t::single_timer().
Examples
so_5/custom_direct_mbox/main.cpp.

Definition at line 185 of file mbox.hpp.

Constructor & Destructor Documentation

◆ abstract_message_box_t() [1/3]

so_5::abstract_message_box_t::abstract_message_box_t ( const abstract_message_box_t & )
privatedelete

◆ abstract_message_box_t() [2/3]

so_5::abstract_message_box_t::abstract_message_box_t ( abstract_message_box_t && )
privatedelete

◆ abstract_message_box_t() [3/3]

so_5::abstract_message_box_t::abstract_message_box_t ( )
default

◆ ~abstract_message_box_t()

virtual so_5::abstract_message_box_t::~abstract_message_box_t ( )
virtualdefaultnoexcept

Member Function Documentation

◆ do_deliver_message()

virtual void so_5::abstract_message_box_t::do_deliver_message ( message_delivery_mode_t delivery_mode,
const std::type_index & msg_type,
const message_ref_t & message,
unsigned int redirection_deep )
pure virtual

Deliver message for all subscribers with respect to message limits.

Since
v.5.5.4

A message delivery from timer thread is somewhat different from an ordinary message delivery. Especially in the case when target mbox is a message chain. If that message chain is full and some kind of overflow reaction is specified (like waiting for some time or throwing an exception) then it can lead to undesired behaviour of the whole application. To take care about these cases a new method is introduced.

Note
Since v.5.6.0 this method is used for deliverance of ordinary messages/signals and for deliverance of enveloped messages.
Parameters
delivery_modeCan the delivery blocks the current thread?
msg_typeType of the message to deliver.
messageA message instance to be delivered.
redirection_deepCurrent deep of overlimit reaction recursion.

Implemented in so_5::impl::local_mbox_template< Tracing_Base >, so_5::impl::mpsc_mbox_template_t< Tracing_Base, Limits_Handling_Mixin >, so_5::impl::named_local_mbox_t, so_5::mchain_props::mchain_template< Queue, Tracing_Base >, so_5::msg_tracing::impl::special_enveloping_mbox_t, so_5::stats::impl::st_env_stuff::next_turn_mbox_t, and so_5::unique_subscribers_mbox_impl::actual_mbox_t< Mutex, Tracing_Base >.

Examples
so_5/custom_direct_mbox/main.cpp.

◆ drop_delivery_filter()

◆ environment()

◆ id()

◆ operator=() [1/2]

abstract_message_box_t & so_5::abstract_message_box_t::operator= ( abstract_message_box_t && )
privatedelete

◆ operator=() [2/2]

abstract_message_box_t & so_5::abstract_message_box_t::operator= ( const abstract_message_box_t & )
privatedelete

◆ query_name()

◆ set_delivery_filter()

virtual void so_5::abstract_message_box_t::set_delivery_filter ( const std::type_index & msg_type,
const delivery_filter_t & filter,
abstract_message_sink_t & subscriber )
pure virtual

Set a delivery filter for message type and subscriber.

Since
v.5.5.5
Note
If there already is a delivery filter for that (msg_type,subscriber) pair then old delivery filter will be replaced by new one.
Parameters
msg_typeMessage type to be filtered.
filterFilter to be set. A caller must guaranted the validity of this reference.
subscriberA subscriber for the message.

Implemented in so_5::impl::local_mbox_template< Tracing_Base >, so_5::impl::mpsc_mbox_template_t< Tracing_Base, Limits_Handling_Mixin >, so_5::impl::named_local_mbox_t, so_5::mchain_props::mchain_template< Queue, Tracing_Base >, so_5::msg_tracing::impl::special_enveloping_mbox_t, so_5::stats::impl::st_env_stuff::next_turn_mbox_t, and so_5::unique_subscribers_mbox_impl::actual_mbox_t< Mutex, Tracing_Base >.

Examples
so_5/custom_direct_mbox/main.cpp.

◆ subscribe_event_handler()

◆ type()

virtual mbox_type_t so_5::abstract_message_box_t::type ( ) const
nodiscardpure virtual

◆ unsubscribe_event_handler()

Friends And Related Symbol Documentation

◆ intrusive_ptr_t< abstract_message_box_t >

friend class intrusive_ptr_t< abstract_message_box_t >
friend

Definition at line 135 of file mbox.hpp.

◆ so_5::impl::mbox_iface_for_timers_t

It is necessary for for access to do_deliver_message_from_timer().

Note
Added in v.5.5.18.

Definition at line 195 of file mbox.hpp.


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