2
3
5#include <so_5/environment.hpp>
9#include <so_5/impl/internal_env_iface.hpp>
10#include <so_5/impl/coop_private_iface.hpp>
12#include <so_5/impl/mbox_core.hpp>
13#include <so_5/impl/layer_core.hpp>
14#include <so_5/impl/stop_guard_repo.hpp>
15#include <so_5/impl/std_msg_tracer_holder.hpp>
17#include <so_5/impl/run_stage.hpp>
19#include <so_5/stats/impl/std_controller.hpp>
20#include <so_5/stats/impl/ds_mbox_core_stats.hpp>
21#include <so_5/stats/impl/ds_agent_core_stats.hpp>
22#include <so_5/stats/impl/ds_timer_thread_stats.hpp>
24#include <so_5/env_infrastructures.hpp>
26#include <so_5/details/rollback_on_exception.hpp>
118 so_5::timer_thread_factory_t factory )
126 coop_listener_unique_ptr_t coop_listener )
134 event_exception_logger_unique_ptr_t logger )
136 if(
nullptr != logger.get() )
144 const std::type_index & type,
145 layer_unique_ptr_t layer_ptr )
147 m_so_layers[ type ] = layer_ref_t( layer_ptr.release() );
154
155
156
157
163 impl::mbox_core_t & mbox_repository,
188
189
190
191
192
193queue_locks_defaults_manager_unique_ptr_t
196 queue_locks_defaults_manager_unique_ptr_t current )
198 queue_locks_defaults_manager_unique_ptr_t result( std::move(current) );
210
211
212
213
214
215
225 return original_queue;
237
238
239
240
241
243event_queue_hook_unique_ptr_t
246 event_queue_hook_unique_ptr_t current )
248 event_queue_hook_unique_ptr_t result( std::move(current) );
258
259
260
261
262
263
264
265
266
268so_5::
disp::abstract_work_thread_factory_shptr_t
271 so_5::
disp::abstract_work_thread_factory_shptr_t user_provided_factory )
273 so_5::
disp::abstract_work_thread_factory_shptr_t result{
274 std::move(user_provided_factory)
284
285
286
287
288
289
290
291
292
294so_5::subscription_storage_factory_t
297 subscription_storage_factory_t user_provided_factory )
299 if( !user_provided_factory )
302 return user_provided_factory;
311
312
313
314
318
319
320
321
322
323
324
328
329
330
331
332
333
334
335
342
343
344
345
349
350
351
352
353
354
355
362
363
364
365
369
370
371
372
373
374
378
379
380
381
382
383
384
385
386
387
388
392
393
394
395
399
400
401
402
406
407
408
409
410
411
412
413
417
418
419
420
421
422
423
424
425
429
430
431
432
433
434
435
436
440
441
442
443
447
448
449
450
451
452
453
465 new impl::mbox_core_t
{
540 const std::function< mbox_t() > & mbox_factory )
543 std::move(mbox_namespace)
,
544 std::move(mbox_name)
,
557 event_exception_logger_unique_ptr_t logger )
561 std::lock_guard< std::mutex > lock{
583 disp_binder_shptr_t disp_binder )
587 std::move(disp_binder)
);
604 disp_binder_shptr_t disp_binder )
608 std::move(disp_binder)
);
624 using duration = std::chrono::steady_clock::duration;
625 if( params
.m_pause < duration::zero() )
628 "an attempt to call schedule_timer() with negative pause value" );
632 "an attempt to call schedule_timer() with negative period value" );
638 if( std::chrono::steady_clock::duration::zero() != params
.m_period )
641 "unable to schedule periodic timer for mutable message,"
642 " msg_type=" + std::string(params
.m_msg_type.name()) );
647 "unable to schedule timer for mutable message and "
648 "MPMC mbox, msg_type=" + std::string(params
.m_msg_type.name()) );
664 using duration = std::chrono::steady_clock::duration;
665 if( params
.m_pause < duration::zero() )
668 "an attempt to call single_timer() with negative pause value" );
675 "unable to schedule single timer for mutable message and "
676 "MPMC mbox, msg_type=" + std::string(params
.m_msg_type.name()) );
687 const std::type_index & type )
const
694 const std::type_index & type,
695 const layer_ref_t & layer )
712 catch(
const std::exception & x )
716 std::string(
"some unexpected error during "
717 "environment launching: " ) + x.what() );
732 const std::exception & event_exception,
764so_5::
disp::abstract_work_thread_factory_shptr_t
797 stop_guard_shptr_t guard,
803 reaction_on_stop_in_progress )
807 "stop_guard can't be set because the stop operation is "
808 "already in progress" );
816 stop_guard_shptr_t guard )
830 "msg_tracing's filter can't be changed when msg_tracing "
840 "run_stats_controller",
860 class autoshutdown_guard_t
final
869 bool autoshutdown_disabled )
895 autoshutdown_guard_t guard
{
927 coop_shptr_t coop )
noexcept
934 coop_shptr_t coop )
noexcept
936 bool any_cooperation_alive =
955 "msg_tracer cannot be accessed because msg_tracing is disabled" );
1003[[
nodiscard]] subscription_storage_factory_t
virtual mbox_type_t type() const =0
Get the type of message box.
autoshutdown_guard_t(environment_t &env, bool autoshutdown_disabled)
coop_handle_t m_guard_coop
const bool m_autoshutdown_disabled
A bunch of data sources for core objects.
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.
Type of smart handle for a cooperation.
A special type that plays role of unique_ptr for coop.
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.
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 ¶ms)
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.
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.
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.
mbox_core_t(outliving_reference_t< so_5::msg_tracing::holder_t > msg_tracing_stuff)
mbox_t create_custom_mbox(environment_t &env, ::so_5::custom_mbox_details::creator_iface_t &creator)
Create a custom mbox.
mchain_t create_mchain(environment_t &env, const mchain_params_t ¶ms)
Create message chain.
mbox_t create_mbox(environment_t &env)
Create local anonymous mbox.
mbox_t create_mbox(environment_t &env, nonempty_name_t mbox_name)
Create local named mbox.
mbox_id_t allocate_mbox_id() noexcept
Allocate an ID for a new custom mbox or mchain.
Repository of stop_guards.
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.
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.
A class for the name of mbox_namespace.
Parameters for message chain.
friend message_mutability_t message_mutability(const intrusive_ptr_t< message_t > &what) noexcept
Helper method for safe get of message mutability flag.
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.
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.
@ stop_already_in_progress
what_if_stop_in_progress_t
@ throw_exception
An exception must be thrown.
An indentificator for the timer.
#define SO_5_THROW_EXCEPTION(error_code, desc)
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.
const int normal
Normal deregistration.
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.
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.
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.
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.
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.
@ multi_producer_multi_consumer
const int rc_negative_value_for_pause
An attempt to use negative value for pause argument for delayed or periodic message/signal.
const int rc_mutable_msg_cannot_be_periodic
An attempt to send mutable message as a periodic message.
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.
exception_reaction_t
A reaction of SObjectizer to an exception from agent event.
@ abort_on_exception
Execution of application must be aborted immediatelly.
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.
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.
@ unspecified
Tracking mode is specified elsewhere.
const int rc_msg_tracing_disabled
Message delivery tracing is disabled and cannot be used.
const int rc_environment_error
so_environment launch is failed.
const int rc_mutable_msg_cannot_be_delivered_via_mpmc_mbox
An attempt to deliver mutable message via MPMC mbox.
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.
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 &¶ms)
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.
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.