2
3
6
7
8
9
10
12#include <so_5/message_limit.hpp>
14#include <so_5/impl/message_limit_action_msg_tracer.hpp>
15#include <so_5/impl/enveloped_msg_details.hpp>
17#include <so_5/environment.hpp>
18#include <so_5/enveloped_msg.hpp>
20#include <so_5/error_logger.hpp>
21#include <so_5/ret_code.hpp>
24#include <so_5/details/abort_on_fatal_error.hpp>
55 <<
"message limit exceeded, application will be aborted. "
78 logger <<
"maximum message redirection deep exceeded on "
79 "overlimit redirect_reaction; message will be ignored; "
109 const std::type_index & msg_type,
110 const message_ref_t & message )
121 logger <<
"maximum message redirection deep exceeded on "
122 "overlimit transform_reaction; message will be ignored;"
126 <<
", result_msg_type: " << msg_type.name()
virtual std::string query_name() const =0
Get the mbox name.
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.
environment_t & so_environment() const noexcept
Access to the SObjectizer Environment which this agent is belong.
error_logger_t & error_logger() const
Get the error_logger object.
T * operator->() const noexcept
virtual void reaction_redirect_message(const agent_t *subscriber, const mbox_t &target) const noexcept=0
Message will be redirected to another mbox.
virtual void reaction_transform(const agent_t *subscriber, const mbox_t &target, const std::type_index &msg_type, const message_ref_t &transformed) const noexcept=0
Message will be transformed and redirected.
virtual void reaction_abort_app(const agent_t *subscriber) const noexcept=0
Application will be aborted as result of overlimit.
virtual void reaction_drop_message(const agent_t *subscriber) const noexcept=0
Message will be dropped as result of overlimit.
#define SO_5_LOG_ERROR(logger, var_name)
A special macro for helping error logging.
Some reusable and low-level classes/functions which can be used in public header files.
void abort_on_fatal_error(L logging_lambda) noexcept
Internal implementation of message limits related stuff.
SO_5_FUNC void redirect_reaction(const overlimit_context_t &ctx, const mbox_t &to)
Actual implementation of redirect message reaction.
SO_5_FUNC void abort_app_reaction(const overlimit_context_t &ctx)
Actual implementation of abort application reaction.
SO_5_FUNC void drop_message_reaction(const overlimit_context_t &ctx)
Actual implementation of drop message reaction.
SO_5_FUNC void transform_reaction(const overlimit_context_t &ctx, const mbox_t &to, const std::type_index &msg_type, const message_ref_t &message)
Actual implementation of transform reaction.
All stuff related to message limits.
Private part of message limit implementation.
message_delivery_mode_t
Possible modes of message/signal delivery.
constexpr unsigned int max_redirection_deep
Maximum deep of message redirections.
unsigned int m_limit
Limit value.
Description of context for overlimit action.
const control_block_t & m_limit
Control block for message limit.
const unsigned int m_reaction_deep
The current deep of overlimit reaction recursion.
const agent_t & m_receiver
Receiver of the message (or enveloped message).
const std::type_index & m_msg_type
Type of message to be delivered.
const message_ref_t & m_message
A message (or enveloped message) to be delivered.
const impl::action_msg_tracer_t * m_msg_tracer
An optional pointer to tracer object for message delivery tracing.