SObjectizer 5.8
Loading...
Searching...
No Matches
mbox_core.hpp
Go to the documentation of this file.
1/*
2 SObjectizer 5.
3*/
4
5/*!
6 \file
7 \brief A definition of an utility class for work with mboxes.
8*/
9
10#pragma once
11
12#include <so_5/mbox.hpp>
13#include <so_5/mbox_namespace_name.hpp>
14#include <so_5/mchain.hpp>
15#include <so_5/nonempty_name.hpp>
16
17#include <so_5/message_limit.hpp>
18
19#include <so_5/atomic_refcounted.hpp>
20#include <so_5/msg_tracing.hpp>
21#include <so_5/outliving.hpp>
22
23#include <so_5/custom_mbox.hpp>
24
25#include <functional>
26#include <map>
27#include <memory>
28#include <mutex>
29#include <string>
30#include <tuple>
31#include <vector>
32
33namespace so_5
34{
35
36namespace impl
37{
38
39//
40// mbox_core_stats_t
41//
42/*!
43 * \since
44 * v.5.5.4
45 *
46 * \brief Statistics from mbox_core for run-time monitoring.
47 */
49 {
50 //! Count of named mboxes.
51 std::size_t m_named_mbox_count;
52 };
53
54//
55// full_named_mbox_id_t
56//
57/*!
58 * \brief Full name for a named mbox.
59 *
60 * The full name includes mbox namespace and the name of the mbox.
61 *
62 * \note
63 * The mbox namespace may be empty if named was created as ordinary
64 * named mbox (via environment_t::create_mbox()).
65 *
66 * \since v.5.8.0
67 */
69 {
70 /*!
71 * \brief Name of mbox namespace in that the mbox is defined.
72 *
73 * May be empty for ordinary named mbox.
74 */
75 std::string m_namespace;
76
77 /*!
78 * \brief Own name of the mbox.
79 *
80 * \attention
81 * Can't be empty.
82 */
83 std::string m_name;
84
85 //! Initializing constructor.
87 std::string mbox_namespace,
88 std::string mbox_name )
89 : m_namespace{ std::move(mbox_namespace) }
90 , m_name{ std::move(mbox_name) }
91 {}
92 };
93
94[[nodiscard]]
95inline bool
97 const full_named_mbox_id_t & a,
98 const full_named_mbox_id_t & b )
99 {
100 return std::tie(a.m_namespace, a.m_name) <
101 std::tie(b.m_namespace, b.m_name);
102 }
103
104//
105// default_global_mbox_namespace
106//
107/*!
108 * \brief Helper function that returns name of the default global
109 * namespace for named mboxes.
110 *
111 * \note
112 * This default global namespace has empty name in the current version
113 * of SObjectizer.
114 *
115 * \since v.5.8.0
116 */
117[[nodiscard]]
118inline std::string
120 {
121 return {};
122 }
123
124//
125// mbox_core_t
126//
127
128/*!
129 * \brief A utility class for the work with mboxes.
130 */
131class mbox_core_t final : private atomic_refcounted_t
132{
133 friend class intrusive_ptr_t< mbox_core_t >;
134
135 mbox_core_t( const mbox_core_t & ) = delete;
136 mbox_core_t & operator=( const mbox_core_t & ) = delete;
137
138 public:
140 //! Message delivery tracing stuff.
141 outliving_reference_t< so_5::msg_tracing::holder_t > msg_tracing_stuff );
142
143 //! Create local anonymous mbox.
144 /*!
145 \note always creates a new mbox.
146 */
147 [[nodiscard]]
148 mbox_t
149 create_mbox( environment_t & env );
150
151 //! Create local named mbox.
152 /*!
153 \note if mbox with specified name \a mbox_name is present,
154 method won't create a new mbox. In this case method
155 will return a new mbox_t, which links to
156 the present mbox (with this name).
157 */
158 [[nodiscard]]
159 mbox_t
161 //! Environment for which the mbox is created.
162 environment_t & env,
163 //! Mbox name.
164 nonempty_name_t mbox_name );
165
166 /*!
167 * \brief Create mpsc_mbox that handles message limits.
168 *
169 * \since v.5.8.0
170 */
171 [[nodiscard]]
172 mbox_t
174 //! Environment for which the mbox is created.
175 environment_t & env,
176 //! The only consumer for the mbox.
177 agent_t & owner );
178
179 /*!
180 * \brief Create mpsc_mbox that ignores message limits.
181 *
182 * \since v.5.8.0
183 */
184 [[nodiscard]]
185 mbox_t
187 //! Environment for which the mbox is created.
188 environment_t & env,
189 //! The only consumer for the mbox.
190 agent_t & owner );
191
192 //! Remove a reference to the named mbox.
193 /*!
194 * If it was a last reference to named mbox the mbox destroyed.
195 */
196 void
198 //! Mbox name.
199 const full_named_mbox_id_t & name ) noexcept;
200
201 /*!
202 * \brief Create a custom mbox.
203 *
204 * \since
205 * v.5.5.19.2
206 */
207 [[nodiscard]]
208 mbox_t
210 //! Environment for which the mbox is created.
211 environment_t & env,
212 //! Creator for new mbox.
214
215 /*!
216 * \brief Introduce named mbox with user-provided factory.
217 *
218 * \since v.5.8.0
219 */
220 [[nodiscard]]
221 mbox_t
223 //! Name of mbox_namespace for a new mbox.
224 mbox_namespace_name_t mbox_namespace,
225 //! Name for a new mbox.
226 nonempty_name_t mbox_name,
227 //! Factory for new mbox.
228 const std::function< mbox_t() > & mbox_factory );
229
230 /*!
231 * \since
232 * v.5.5.13
233 *
234 * \brief Create message chain.
235 *
236 * \par Usage examples:
237 */
238 mchain_t
240 //! SObjectizer Environment for which message chain will be created.
241 environment_t & env,
242 //! Parameters for a new chain.
243 const mchain_params_t & params );
244
245 /*!
246 * \since
247 * v.5.5.4
248 *
249 * \brief Get statistics for run-time monitoring.
250 */
252 query_stats();
253
254 /*!
255 * \brief Allocate an ID for a new custom mbox or mchain.
256 *
257 * \since
258 * v.5.7.0
259 */
260 [[nodiscard]] mbox_id_t
261 allocate_mbox_id() noexcept;
262
263 private:
264 /*!
265 * \brief Data related to message delivery tracing.
266 *
267 * \since
268 * v.5.5.22
269 */
271
272 //! Named mbox map's lock.
274
275 //! Named mbox information.
277 {
278 named_mbox_info_t( mbox_t mbox )
279 :
281 m_mbox( std::move(mbox) )
282 {}
283
284 //! Reference count by external mbox_refs.
286 //! Real mbox for that name.
287 mbox_t m_mbox;
288 };
289
290 //! Typedef for the map from the mbox name to the mbox information.
291 using named_mboxes_dictionary_t = std::map<
294 std::less<> // It's important.
295 >;
296
297 //! Named mboxes.
298 named_mboxes_dictionary_t m_named_mboxes_dictionary;
299
300 /*!
301 * \since
302 * v.5.4.0
303 *
304 * \brief A counter for mbox ID generation.
305 */
306 std::atomic< mbox_id_t > m_mbox_id_counter;
307};
308
309//! Smart reference to the mbox_core_t.
310/*!
311 * \note
312 * It was a separate class until v.5.8.0.
313 * Since v.5.8.0 it's just a typedef for intrusive_ptr_t.
314 */
315using mbox_core_ref_t = intrusive_ptr_t< mbox_core_t >;
316
317} /* namespace impl */
318
319} /* namespace so_5 */
virtual mbox_type_t type() const =0
Get the type of message box.
A base class for agents.
Definition agent.hpp:673
autoshutdown_guard_t(environment_t &env, bool autoshutdown_disabled)
stats::auto_registered_source_holder_t< stats::impl::ds_timer_thread_stats_t > m_timer_thread
Data source for timer thread.
stats::auto_registered_source_holder_t< stats::impl::ds_agent_core_stats_t > m_coop_repository
Data source for cooperations repository.
stats::auto_registered_source_holder_t< stats::impl::ds_mbox_core_stats_t > m_mbox_repository
Data source for mboxes repository.
core_data_sources_t(outliving_reference_t< stats::repository_t > ds_repository, impl::mbox_core_t &mbox_repository, so_5::environment_infrastructure_t &infrastructure)
event_queue_t * on_bind(agent_t *, event_queue_t *original_queue) noexcept override
A reaction to binding of an agent to some event_queue.
void on_unbind(agent_t *, event_queue_t *) noexcept override
A reaction to unbinding of an agent from some event_queue.
The base class for the object with a reference counting.
Type of smart handle for a cooperation.
A special type that plays role of unique_ptr for coop.
Definition coop.hpp:1342
Interface for creator of new mbox in OOP style.
Alias for namespace with traits of event queue.
disp_params_t()=default
Default constructor.
An interface for environment_infrastructure entity.
virtual::so_5::stats::repository_t & stats_repository() noexcept=0
Get stats repository for the environment.
virtual coop_unique_holder_t make_coop(coop_handle_t parent, disp_binder_shptr_t default_binder)=0
Create an instance of a new coop.
virtual bool final_deregister_coop(coop_shptr_t coop) noexcept=0
Do final actions of the cooperation deregistration.
virtual void launch(env_init_t init_fn)=0
Do actual launch of SObjectizer's Environment.
virtual void ready_to_deregister_notify(coop_shptr_t coop) noexcept=0
virtual::so_5::stats::controller_t & stats_controller() noexcept=0
Get stats controller for the environment.
virtual so_5::timer_id_t schedule_timer(const std::type_index &type_wrapper, const message_ref_t &msg, const mbox_t &mbox, std::chrono::steady_clock::duration pause, std::chrono::steady_clock::duration period)=0
Initiate a timer (delayed or periodic message).
virtual void stop() noexcept=0
Initiate a signal for shutdown of Environment.
virtual coop_handle_t register_coop(coop_unique_holder_t coop)=0
Register new cooperation.
virtual disp_binder_shptr_t make_default_disp_binder()=0
Create a binder for the default dispatcher.
virtual void single_timer(const std::type_index &type_wrapper, const message_ref_t &msg, const mbox_t &mbox, std::chrono::steady_clock::duration pause)=0
Initiate a delayed message.
Parameters for the SObjectizer Environment initialization.
event_queue_hook_unique_ptr_t m_event_queue_hook
An event_queue_hook object.
layer_map_t m_so_layers
Additional layers.
so_5::disp::abstract_work_thread_factory_shptr_t so5_giveout_work_thread_factory()
Take out work_thread_factory object.
environment_infrastructure_factory_t m_infrastructure_factory
A factory for environment infrastructure entity.
environment_params_t & event_exception_logger(event_exception_logger_unique_ptr_t logger)
Set exception logger object.
bool m_autoshutdown_disabled
Is autoshutdown when there is no more cooperation disabled?
queue_locks_defaults_manager_unique_ptr_t so5_giveout_queue_locks_defaults_manager()
Take out queue locks defaults manager.
default_disp_params_t m_default_disp_params
Parameters for the default dispatcher.
void add_layer(const std::type_index &type, layer_unique_ptr_t layer_ptr)
Add an additional layer.
bool autoshutdown_disabled() const
Is autoshutdown disabled?
so_5::msg_tracing::tracer_unique_ptr_t so5_giveout_message_delivery_tracer()
Get message delivery tracer for the environment.
so_5::msg_tracing::filter_shptr_t so5_giveout_message_delivery_tracer_filter()
Get message delivery tracer filter for the environment.
queue_locks_defaults_manager_unique_ptr_t m_queue_locks_defaults_manager
Manager for defaults of queue locks.
environment_params_t(environment_params_t &&other)
Move constructor.
const environment_infrastructure_factory_t & infrastructure_factory() const
Get the current environment infrastructure factory.
friend SO_5_FUNC void swap(environment_params_t &a, environment_params_t &b) noexcept
Swap operation.
environment_params_t & coop_listener(coop_listener_unique_ptr_t coop_listener)
Set cooperation listener object.
layer_map_t so5_giveout_layers_map()
Get map of default SObjectizer's layers.
so_5::msg_tracing::tracer_unique_ptr_t m_message_delivery_tracer
Tracer for message delivery.
exception_reaction_t exception_reaction() const noexcept
Get exception reaction flag value.
error_logger_shptr_t m_error_logger
Error logger for the environment.
subscription_storage_factory_t m_default_subscription_storage_factory
Default subscription storage factory.
so_5::disp::abstract_work_thread_factory_shptr_t m_work_thread_factory
Global factory for work threads.
environment_params_t()
Constructor.
event_exception_logger_unique_ptr_t m_event_exception_logger
Exception logger.
event_queue_hook_unique_ptr_t so5_giveout_event_queue_hook()
Take out event_queue_hook object.
so_5::msg_tracing::filter_shptr_t m_message_delivery_tracer_filter
Message delivery tracer filter to be used with environment.
work_thread_activity_tracking_t work_thread_activity_tracking() const
Get activity tracking flag for the whole SObjectizer Environment.
const error_logger_shptr_t & so5_error_logger() const
Get error logger for the environment.
environment_params_t & operator=(environment_params_t &&other) noexcept
Move operator.
event_exception_logger_unique_ptr_t so5_giveout_event_exception_logger()
Get exception logger.
coop_listener_unique_ptr_t m_coop_listener
Cooperation listener.
environment_params_t & timer_thread(so_5::timer_thread_factory_t factory)
Set the timer_thread factory.
exception_reaction_t m_exception_reaction
Exception reaction flag for the whole SO Environment.
work_thread_activity_tracking_t m_work_thread_activity_tracking
Work thread activity tracking for the whole Environment.
const subscription_storage_factory_t & default_subscription_storage_factory() const noexcept
Get the current default subscription storage factory.
so_5::timer_thread_factory_t m_timer_thread_factory
Timer thread factory.
SObjectizer Environment.
disp_binder_shptr_t so_make_default_disp_binder()
Get binding to the default dispatcher.
mbox_t create_mbox()
Create an anonymous MPMC mbox.
error_logger_t & error_logger() const
Get the error_logger object.
void imp_run_layers_and_go_further()
Run layers and call next run stage.
void add_extra_layer(const std::type_index &type, const layer_ref_t &layer)
Add an additional layer.
so_5::timer_id_t so_schedule_timer(const low_level_api::schedule_timer_params_t params)
Schedule timer event.
stats::repository_t & stats_repository()
Access to repository of data sources for run-time monitoring.
void change_message_delivery_tracer_filter(so_5::msg_tracing::filter_shptr_t filter)
Change the current msg_tracing's filter to a new one.
void install_exception_logger(event_exception_logger_unique_ptr_t logger)
Set up an exception logger.
mbox_t introduce_named_mbox(mbox_namespace_name_t mbox_namespace, nonempty_name_t mbox_name, const std::function< mbox_t() > &mbox_factory)
Introduce named mbox with user-provided factory.
void run()
Run the SObjectizer Run-Time.
mchain_t create_mchain(const mchain_params_t &params)
Create message chain.
exception_reaction_t exception_reaction() const noexcept
An exception reaction for the whole SO Environment.
std::unique_ptr< internals_t > m_impl
SObjectizer Environment internals.
environment_t & self_ref()
Auxiliary methods for getting reference to itself.
coop_unique_holder_t make_coop(coop_handle_t parent)
Create a new cooperation that will be a child for specified parent coop.
so_5::disp::abstract_work_thread_factory_shptr_t work_thread_factory() const noexcept
Access to the global work thread factory.
void call_exception_logger(const std::exception &event_exception, const coop_handle_t &coop) noexcept
Call event exception logger for logging an exception.
environment_t(environment_params_t &&so_environment_params)
stats::controller_t & stats_controller()
Access to controller of run-time monitoring.
layer_t * query_layer(const std::type_index &type) const
Access to an additional layer.
void imp_run_infrastructure()
Launch environment infrastructure and wait for finish.
void imp_run_stats_controller_and_go_further()
Run controller for run-time monitoring and call next run stage.
coop_unique_holder_t make_coop()
Create a cooperation.
void stop() noexcept
Send a shutdown signal to the Run-Time.
work_thread_activity_tracking_t work_thread_activity_tracking() const
Get activity tracking flag for the whole SObjectizer Environment.
mbox_t do_make_custom_mbox(custom_mbox_details::creator_iface_t &creator)
Actual creation of a custom mbox.
void remove_stop_guard(stop_guard_shptr_t guard)
Remove stop_guard and complete the stop operation if necessary.
coop_handle_t register_coop(coop_unique_holder_t agent_coop)
Register a cooperation.
void deregister_coop(coop_handle_t coop, int reason) noexcept
Deregister the cooperation.
coop_unique_holder_t make_coop(disp_binder_shptr_t disp_binder)
Create a cooperation with specified dispatcher binder.
virtual void init()=0
Initialization hook.
mbox_t create_mbox(nonempty_name_t mbox_name)
Create named MPMC mbox.
void so_single_timer(const low_level_api::single_timer_params_t params)
Schedule a single shot timer event.
stop_guard_t::setup_result_t setup_stop_guard(stop_guard_shptr_t guard, stop_guard_t::what_if_stop_in_progress_t reaction_on_stop_in_progress=stop_guard_t::what_if_stop_in_progress_t::throw_exception)
Set up a new stop_guard.
bool autoshutdown_disabled() const
Get autoshutdown_disabled flag.
coop_unique_holder_t make_coop(coop_handle_t parent, disp_binder_shptr_t disp_binder)
Create a new cooperation that will be a child for specified parent coop.
An interface for logging error messages.
virtual void on_install(event_exception_logger_unique_ptr_t previous_logger) noexcept
Installation hook.
virtual void log_exception(const std::exception &event_exception, const coop_handle_t &coop) noexcept=0
Log the exception caught.
Interface of event_queue_hook object.
virtual event_queue_t * on_bind(agent_t *agent, event_queue_t *original_queue) noexcept=0
A reaction to binding of an agent to some event_queue.
static void default_deleter(event_queue_hook_t *what) noexcept
An implementation of deleter that use operator delete for destroying object of type event_queue_hook.
virtual void on_unbind(agent_t *agent, event_queue_t *queue) noexcept=0
A reaction to unbinding of an agent from some event_queue.
An interface of event queue for agent.
The base class for all SObjectizer exceptions.
Definition exception.hpp:34
A helper class for accessing the functionality of environment-class which is specific for SObjectizer...
mbox_id_t allocate_mbox_id() noexcept
Allocate a new ID for a new custom mbox or mchain.
event_queue_t * event_queue_on_bind(agent_t *agent, event_queue_t *original_queue) noexcept
Call the event_queue_hook when an agent is being bound to a particular event_queue.
so_5::disp::mpmc_queue_traits::lock_factory_t default_mpmc_queue_lock_factory() const
Get default lock_factory for MPMC queues.
so_5::msg_tracing::holder_t & msg_tracing_stuff() const
Get access to message delivery tracer stuff holder.
subscription_storage_factory_t default_subscription_storage_factory() const noexcept(noexcept(subscription_storage_factory_t{}=subscription_storage_factory_t{}))
Get the default storage subscription factory.
environment_t & m_env
Environment instance to work with.
void event_queue_on_unbind(agent_t *agent, event_queue_t *queue) noexcept
Call the event_queue_hook when an agent is being unbound from its event_queue.
mbox_t create_ordinary_mpsc_mbox(agent_t &single_consumer)
Create multi-producer/single-consumer mbox that handles message limits.
bool is_msg_tracing_enabled() const
Is message delivery tracing enabled?
so_5::msg_tracing::holder_t & msg_tracing_stuff_nonchecked() const noexcept
Get access to message delivery tracer stuff holder.
so_5::disp::mpsc_queue_traits::lock_factory_t default_mpsc_queue_lock_factory() const
Get default lock_factory for MPSC queues.
void final_deregister_coop(coop_shptr_t coop) noexcept
Do the final actions of a cooperation deregistration.
mbox_t create_limitless_mpsc_mbox(agent_t &single_consumer)
Create multi-producer/single-consumer mbox that ignores message limits.
void ready_to_deregister_notify(coop_shptr_t coop) noexcept
Notification about readiness to the deregistration.
An utility class for working with layers.
layer_t * query_layer(const std::type_index &type) const
Get a layer.
void add_extra_layer(const std::type_index &type, const layer_ref_t &layer)
Add an extra layer.
void start()
Start all layers.
layer_core_t(environment_t &env, layer_map_t &&so_layers)
void finish()
Shutdown all layers and wait for full stop of them.
mbox_t create_ordinary_mpsc_mbox(environment_t &env, agent_t &owner)
Create mpsc_mbox that handles message limits.
mbox_t create_limitless_mpsc_mbox(environment_t &env, agent_t &owner)
Create mpsc_mbox that ignores message limits.
named_mboxes_dictionary_t m_named_mboxes_dictionary
Named mboxes.
mbox_t introduce_named_mbox(mbox_namespace_name_t mbox_namespace, nonempty_name_t mbox_name, const std::function< mbox_t() > &mbox_factory)
Introduce named mbox with user-provided factory.
outliving_reference_t< so_5::msg_tracing::holder_t > m_msg_tracing_stuff
Data related to message delivery tracing.
mbox_core_t(outliving_reference_t< so_5::msg_tracing::holder_t > msg_tracing_stuff)
Definition mbox_core.cpp:27
std::mutex m_dictionary_lock
Named mbox map's lock.
mbox_t create_custom_mbox(environment_t &env, ::so_5::custom_mbox_details::creator_iface_t &creator)
Create a custom mbox.
std::atomic< mbox_id_t > m_mbox_id_counter
A counter for mbox ID generation.
void destroy_mbox(const full_named_mbox_id_t &name) noexcept
Remove a reference to the named mbox.
mchain_t create_mchain(environment_t &env, const mchain_params_t &params)
Create message chain.
mbox_core_t & operator=(const mbox_core_t &)=delete
mbox_core_t(const mbox_core_t &)=delete
mbox_t create_mbox(environment_t &env)
Create local anonymous mbox.
Definition mbox_core.cpp:35
mbox_t create_mbox(environment_t &env, nonempty_name_t mbox_name)
Create local named mbox.
Definition mbox_core.cpp:46
mbox_id_t allocate_mbox_id() noexcept
Allocate an ID for a new custom mbox or mchain.
mbox_core_stats_t query_stats()
Get statistics for run-time monitoring.
stop_guard_t::setup_result_t setup_guard(stop_guard_shptr_t guard)
Setup new stop_guard.
action_t remove_guard(stop_guard_shptr_t guard) noexcept
Remove stop_guard.
action_t initiate_stop() noexcept
Initiate stop operation.
action_t
Action which must be performed as result of operation on repository.
@ do_actual_stop
Stop operation must be finished.
Template class for smart reference wrapper on the atomic_refcounted_t.
intrusive_ptr_t(T *obj) noexcept
Constructor for a raw pointer.
intrusive_ptr_t(intrusive_ptr_t &&o) noexcept
Move constructor.
T * operator->() const noexcept
T & operator*() const noexcept
friend void swap(intrusive_ptr_t &a, intrusive_ptr_t &b) noexcept
Swap values.
An interface of the additional SObjectizer Environment layer.
Definition so_layer.hpp:31
A class for the name of mbox_namespace.
Parameters for message chain.
Definition mchain.hpp:729
friend message_mutability_t message_mutability(const intrusive_ptr_t< message_t > &what) noexcept
Helper method for safe get of message mutability flag.
Definition message.hpp:74
Interface of holder of message tracer and message trace filter objects.
Standard implementation of message tracer holder.
std_holder_t(filter_shptr_t filter, tracer_unique_ptr_t tracer)
Initializing constructor.
void change_filter(filter_shptr_t filter) noexcept
virtual bool is_msg_tracing_enabled() const noexcept override
Is message tracing enabled?
A class for the name which cannot be empty.
Helper class for indication of long-lived reference via its type.
Definition outliving.hpp:98
virtual so_5::disp::mpsc_queue_traits::lock_factory_t mpsc_queue_lock_factory()=0
Get default lock_factory for MPSC queues.
virtual so_5::disp::mpmc_queue_traits::lock_factory_t mpmc_queue_lock_factory()=0
Get default lock_factory for MPMC queues.
A holder for data-souce that should be automatically registered and deregistered in registry.
A public interface for control SObjectizer monitoring options.
virtual void turn_off()=0
Turn the monitoring off.
A data source for distributing information about mbox_core.
A data source for distributing information about timer_thread.
An interface of data sources repository.
An interface of stop_guard entity.
setup_result_t
Type for result of setting up a new stop_guard.
@ throw_exception
An exception must be thrown.
An indentificator for the timer.
Definition timers.hpp:73
#define SO_5_FUNC
Definition declspec.hpp:48
#define SO_5_THROW_EXCEPTION(error_code, desc)
Definition exception.hpp:74
so_5::subscription_storage_factory_t ensure_subscription_storage_factory_exists(subscription_storage_factory_t user_provided_factory)
Helper function for creation of the default subscription storage factory.
so_5::disp::abstract_work_thread_factory_shptr_t ensure_work_thread_factory_exists(so_5::disp::abstract_work_thread_factory_shptr_t user_provided_factory)
Helper function for creation of the default global work thread factory.
queue_locks_defaults_manager_unique_ptr_t ensure_locks_defaults_manager_exists(queue_locks_defaults_manager_unique_ptr_t current)
Helper function for creation of appropriate manager object if necessary.
event_queue_hook_unique_ptr_t ensure_event_queue_hook_exists(event_queue_hook_unique_ptr_t current)
Helper function for creation of appropriate event_queue_hook object if necessary.
Enumeration of cooperation deregistration reasons.
Definition coop.hpp:39
const int normal
Normal deregistration.
Definition coop.hpp:46
Various stuff related to MPMC event queue implementation and tuning.
Various stuff related to MPSC event queue implementation and tuning.
Dispatcher with single working thread.
Event dispatchers.
SO_5_FUNC abstract_work_thread_factory_shptr_t make_std_work_thread_factory()
Get a standard SObjectizer's work thread factory that is used by default.
Default multi-threaded environment infrastructure.
SO_5_FUNC environment_infrastructure_factory_t factory()
A factory for creation the default multitheading environment infrastructure.
Various implementations of environment_infrastructure.
Details of SObjectizer run-time implementations.
Definition agent.cpp:780
void run_stage(const std::string &stage_name, Init_Fn &&init_fn, Deinit_Fn &&deinit_fn, Next_Stage &&next_stage)
Helper template function for doing initialization phase with rollback on failure.
Definition run_stage.hpp:31
std::string default_global_mbox_namespace()
Helper function that returns name of the default global namespace for named mboxes.
bool operator<(const full_named_mbox_id_t &a, const full_named_mbox_id_t &b)
Definition mbox_core.hpp:96
Implementation details of message delivery tracing mechanism.
Public part of message delivery tracing mechanism.
Internal implementation of run-time monitoring and statistics related stuff.
All stuff related to run-time monitoring and statistics.
Private part of message limit implementation.
Definition agent.cpp:33
event_queue_hook_unique_ptr_t make_event_queue_hook(event_queue_hook_deleter_fnptr_t deleter, Args &&...args)
Helper function for simplify creation of event_queue_hook object.
SO_5_FUNC queue_locks_defaults_manager_unique_ptr_t make_defaults_manager_for_combined_locks()
A factory for queue_locks_defaults_manager with generators for combined locks.
SO_5_FUNC subscription_storage_factory_t default_subscription_storage_factory()
Factory for default subscription storage object.
mbox_type_t
Type of the message box.
Definition mbox.hpp:163
const int rc_negative_value_for_pause
An attempt to use negative value for pause argument for delayed or periodic message/signal.
Definition ret_code.hpp:270
const int rc_mutable_msg_cannot_be_periodic
An attempt to send mutable message as a periodic message.
Definition ret_code.hpp:241
const int rc_cannot_set_stop_guard_when_stop_is_started
An attempt to set up a new stop_guard when the stop operation is already in progress.
Definition ret_code.hpp:259
exception_reaction_t
A reaction of SObjectizer to an exception from agent event.
Definition agent.hpp:65
@ abort_on_exception
Execution of application must be aborted immediatelly.
Definition agent.hpp:67
SO_5_FUNC error_logger_shptr_t create_stderr_logger()
A factory for creating error_logger implemenation which uses std::stderr as log stream.
message_mutability_t
A enum with variants of message mutability or immutability.
Definition types.hpp:94
event_queue_hook_unique_ptr_t make_empty_event_queue_hook_unique_ptr()
Helper function for creation of empty unique_ptr for event_queue_hook.
work_thread_activity_tracking_t
Values for dispatcher's work thread activity tracking.
Definition types.hpp:75
@ unspecified
Tracking mode is specified elsewhere.
const int rc_msg_tracing_disabled
Message delivery tracing is disabled and cannot be used.
Definition ret_code.hpp:182
const int rc_environment_error
so_environment launch is failed.
Definition ret_code.hpp:24
const int rc_mutable_msg_cannot_be_delivered_via_mpmc_mbox
An attempt to deliver mutable message via MPMC mbox.
Definition ret_code.hpp:234
SO_5_FUNC event_exception_logger_unique_ptr_t create_std_event_exception_logger()
Create the default exception logger.
const int rc_negative_value_for_period
An attempt to use negative value for period argument for periodic message/signal.
Definition ret_code.hpp:280
outliving_reference_t< T > outliving_mutable(T &r)
Make outliving_reference wrapper for mutable reference.
Internal details of SObjectizer Environment object.
so_5::msg_tracing::impl::std_holder_t m_msg_tracing_stuff
Holder of stuff related to message delivery tracing.
const exception_reaction_t m_exception_reaction
An exception reaction for the whole SO Environment.
const bool m_autoshutdown_disabled
Is autoshutdown when there is no more cooperation disabled?
core_data_sources_t m_core_data_sources
Data sources for core objects.
impl::layer_core_t m_layer_core
An utility for layers.
event_exception_logger_unique_ptr_t m_event_exception_logger
Logger for exceptions thrown from event-handlers.
impl::mbox_core_ref_t m_mbox_core
An utility for mboxes.
impl::stop_guard_repository_t m_stop_guards
A repository of stop_guards.
environment_infrastructure_unique_ptr_t m_infrastructure
A specific infrastructure for environment.
internals_t(environment_t &env, environment_params_t &&params)
Constructor.
error_logger_shptr_t m_error_logger
Error logger object for this environment.
std::mutex m_event_exception_logger_lock
Lock object for protection of exception logger object.
event_queue_hook_unique_ptr_t m_event_queue_hook
Actual event_queue_hook.
queue_locks_defaults_manager_unique_ptr_t m_queue_locks_defaults_manager
Manager for defaults of queue locks.
work_thread_activity_tracking_t m_work_thread_activity_tracking
Work thread activity tracking for the whole Environment.
so_5::disp::abstract_work_thread_factory_shptr_t m_work_thread_factory
Actual global work thread factory.
subscription_storage_factory_t m_default_subscription_storage_factory
Factory to be used as default subscription storage factory.
Full name for a named mbox.
Definition mbox_core.hpp:69
std::string m_name
Own name of the mbox.
Definition mbox_core.hpp:83
full_named_mbox_id_t(std::string mbox_namespace, std::string mbox_name)
Initializing constructor.
Definition mbox_core.hpp:86
std::string m_namespace
Name of mbox namespace in that the mbox is defined.
Definition mbox_core.hpp:75
Statistics from mbox_core for run-time monitoring.
Definition mbox_core.hpp:49
std::size_t m_named_mbox_count
Count of named mboxes.
Definition mbox_core.hpp:51
mbox_t m_mbox
Real mbox for that name.
unsigned int m_external_ref_count
Reference count by external mbox_refs.
const mbox_t & m_mbox
Mbox to which message will be delivered.
const message_ref_t & m_msg
Message to be sent after timeout.
std::chrono::steady_clock::duration m_period
Period of the delivery repetition for periodic messages.
std::chrono::steady_clock::duration m_pause
Timeout before the first delivery.
const std::type_index & m_msg_type
Message type.
const mbox_t & m_mbox
Mbox to which message will be delivered.
const std::type_index & m_msg_type
Message type.
std::chrono::steady_clock::duration m_pause
Timeout before the delivery.
const message_ref_t & m_msg
Message to be sent after timeout.