Go to the documentation of this file.
9 #ifndef EAGINE_MESSAGE_BUS_BRIDGE_HPP
10 #define EAGINE_MESSAGE_BUS_BRIDGE_HPP
12 #include "../main_ctx_object.hpp"
13 #include "../timeout.hpp"
22 :
public main_ctx_object
23 ,
public connection_user {
25 static constexpr
auto invalid_id() noexcept ->
identifier_t {
29 static constexpr
auto is_valid_id(
identifier_t id) noexcept ->
bool {
30 return id != invalid_id();
36 , _context{make_context(*
this)} {
43 auto add_connection(std::unique_ptr<connection>) ->
bool final;
45 auto has_id() const noexcept ->
bool {
46 return is_valid_id(_id);
49 auto update() -> bool;
50 auto is_done() const noexcept ->
bool;
53 auto no_connection_timeout() const noexcept -> auto& {
54 return _no_connection_timeout;
58 void _setup_from_config();
60 auto _recoverable_state() const noexcept ->
bool;
61 auto _check_state() ->
bool;
62 auto _update_connections() ->
bool;
64 auto _do_send(message_id, message_view&) ->
bool;
65 auto _send(message_id, message_view&) ->
bool;
66 auto _handle_special(message_id, const message_view&,
bool) ->
bool;
67 auto _do_push(message_id, message_view&) ->
bool;
68 auto _forward_messages() ->
bool;
70 shared_context _context{};
74 timeout _no_id_timeout{std::chrono::seconds{2},
nothing};
76 std::chrono::steady_clock::time_point _forwarded_since_i2c{
77 std::chrono::steady_clock::now()};
78 std::chrono::steady_clock::time_point _forwarded_since_c2o{
79 std::chrono::steady_clock::now()};
80 std::intmax_t _state_count{0};
81 std::intmax_t _forwarded_messages_i2c{0};
82 std::intmax_t _forwarded_messages_c2o{0};
83 std::intmax_t _dropped_messages_i2c{0};
84 std::intmax_t _dropped_messages_c2o{0};
85 float _message_age_sum_i2c{0.F};
86 float _message_age_sum_c2o{0.F};
88 std::shared_ptr<bridge_state> _state{};
89 timeout _no_connection_timeout{std::chrono::seconds{30}};
90 std::unique_ptr<connection> _connection{};
95 #if !EAGINE_LINK_LIBRARY || defined(EAGINE_IMPLEMENTING_LIBRARY)
96 #include <eagine/message_bus/bridge.inl>
99 #endif // EAGINE_MESSAGE_BUS_BRIDGE_HPP
const main_ctx_object_parent_info & main_ctx_parent
Alias for main_ctx_object_parent_info parameter type.
Definition: main_ctx_fwd.hpp:24
#define EAGINE_ID(NAME)
Macro for constructing instances of eagine::identifier.
Definition: identifier.hpp:353
basic_block< true > const_block
Alias for const byte memory span.
Definition: block.hpp:32
main_ctx_object(identifier obj_id, main_ctx_parent parent) noexcept
Initialization from object id and parent.
Definition: main_ctx_object.hpp:77
std::uint32_t process_instance_id_t
Unique process identifier type (does not necessarily match to OS PID).
Definition: identifier_t.hpp:22
Message bus code is placed in this namespace.
Definition: eagine.hpp:58
auto process_instance_id() const noexcept -> process_instance_id_t
Returns the process id.
std::uint64_t identifier_t
The underlying integer type for eagine::identifier.
Definition: identifier_t.hpp:19
@ bridge
Message bus bridge.
static constexpr nothing_t nothing
Constant of nothing_t type.
Definition: nothing.hpp:30