OGLplus  (0.59.0) a C++ wrapper for rendering APIs

conn_setup.hpp
Go to the documentation of this file.
1 
9 #ifndef EAGINE_MESSAGE_BUS_CONN_SETUP_HPP
10 #define EAGINE_MESSAGE_BUS_CONN_SETUP_HPP
11 
12 #include "../enum_map.hpp"
13 #include "../main_ctx_object.hpp"
14 #include "conn_factory.hpp"
15 #include <memory>
16 #include <mutex>
17 #include <vector>
18 
19 namespace eagine {
20 class application_config;
21 namespace msgbus {
22 //------------------------------------------------------------------------------
23 class connection_setup;
24 void connection_setup_default_init(connection_setup&);
25 //------------------------------------------------------------------------------
26 static inline auto adapt_log_entry_arg(
27  identifier name,
28  const std::unique_ptr<connection_factory>& value) {
29  return [name, &value](logger_backend& backend) {
30  if(value) {
31  backend.add_identifier(
32  name, EAGINE_ID(ConnFactry), value->type_id());
33  } else {
34  backend.add_nothing(name, EAGINE_ID(ConnFactry));
35  }
36  };
37 }
38 //------------------------------------------------------------------------------
46 public:
49  : main_ctx_object{EAGINE_ID(ConnSetup), parent} {
50  default_init();
51  }
52 
54  void setup_acceptors(acceptor_user& target, string_view address);
55 
58  setup_acceptors(target, address.name());
59  }
60 
63  setup_acceptors(target, string_view{});
64  }
65 
67  void setup_acceptors(
68  acceptor_user& target,
69  connection_kinds kinds,
71 
74  acceptor_user& target,
75  connection_kinds kinds,
77  setup_acceptors(target, kinds, address.name());
78  }
79 
82  setup_acceptors(target, kinds, string_view{});
83  }
84 
86  void setup_acceptors(
87  acceptor_user& target,
88  connection_kind kind,
90 
93  acceptor_user& target,
94  connection_kind kind,
96  setup_acceptors(target, kind, address.name());
97  }
98 
101  setup_acceptors(target, kind, string_view{});
102  }
103 
106 
109  setup_connectors(target, address.name());
110  }
111 
114  setup_connectors(target, string_view{});
115  }
116 
118  void setup_connectors(
119  connection_user& target,
120  connection_kinds kinds,
122 
125  connection_user& target,
126  connection_kinds kinds,
128  setup_connectors(target, kinds, address.name());
129  }
130 
133  setup_connectors(target, kinds, string_view{});
134  }
135 
137  void setup_connectors(
138  connection_user& target,
139  connection_kind kind,
141 
144  connection_user& target,
145  connection_kind kind,
147  setup_connectors(target, kind, address.name());
148  }
149 
152  setup_connectors(target, kind, string_view{});
153  }
154 
156  void add_factory(std::unique_ptr<connection_factory> factory);
157 
158  template <typename Factory, typename... Args>
159  auto make_factory(Args&&... args)
160  -> std::enable_if_t<std::is_base_of_v<connection_factory, Factory>> {
161  add_factory(
162  std::make_unique<Factory>(*this, std::forward<Args>(args)...));
163  }
164 
166  void default_init() {
167  connection_setup_default_init(*this);
168  }
169 
170 private:
171  std::mutex _mutex{};
172 
173  using _factory_list = std::vector<std::unique_ptr<connection_factory>>;
174 
175  template <connection_kind Kind>
176  using _enum_map_unit = _factory_list;
177 
180  _enum_map_unit,
184  _factory_map{};
185 
186  void _do_setup_acceptors(
187  acceptor_user& target,
189  _factory_list& factories);
190 
191  void _do_setup_connectors(
192  connection_user& target,
194  _factory_list& factories);
195 
196  auto _make_call_setup_acceptors(acceptor_user&, string_view address);
197  auto _make_call_setup_connectors(connection_user&, string_view address);
198 };
199 //------------------------------------------------------------------------------
200 } // namespace msgbus
201 } // namespace eagine
202 
203 #if !EAGINE_LINK_LIBRARY || defined(EAGINE_IMPLEMENTING_LIBRARY)
204 #include <eagine/message_bus/conn_setup.inl>
205 #endif
206 
207 #endif // EAGINE_MESSAGE_BUS_CONN_SETUP_HPP
Helper class used to initialize main context objects.
Definition: main_ctx_object.hpp:45
void setup_connectors(connection_user &target, string_view address)
Sets up connectors connecting to the specified address.
basic_string_span< const char > string_view
Alias for const string views.
Definition: string_span.hpp:116
#define EAGINE_ID(NAME)
Macro for constructing instances of eagine::identifier.
Definition: identifier.hpp:353
void setup_connectors(connection_user &target, connection_kinds kinds, identifier address)
Sets up connectors connecting to the specified address.
Definition: conn_setup.hpp:124
Base class for main context objects.
Definition: main_ctx_object.hpp:71
void setup_acceptors(acceptor_user &target, string_view address)
Sets up acceptors listening on the specified address.
Common code is placed in this namespace.
Definition: eagine.hpp:21
void setup_connectors(connection_user &target, connection_kind kind, identifier address)
Sets up connectors connecting to the specified address.
Definition: conn_setup.hpp:143
@ local_interprocess
Inter-process connection for local communication.
Class for manipulating and testing a group of enumeration-based bits.
Definition: bitfield.hpp:19
void setup_acceptors(acceptor_user &target, connection_kind kind)
Sets up acceptors listening on the default address.
Definition: conn_setup.hpp:100
@ in_process
In-process connection (cannot be used for inter-process communication).
@ remote_interprocess
Inter-process connection for remote communucation.
void setup_connectors(connection_user &target, identifier address)
Sets up connectors connecting to the specified address.
Definition: conn_setup.hpp:108
connection_setup(main_ctx_parent parent) noexcept
Construction from a parent main context object.
Definition: conn_setup.hpp:48
void setup_acceptors(acceptor_user &target)
Sets up acceptors listening on the default address.
Definition: conn_setup.hpp:62
Interface for classes that can use message bus connections.
Definition: connection.hpp:155
Interface for classes that can use message bus connection acceptors.
Definition: acceptor.hpp:38
Class mapping from an enumerator of an instantiation of a template.
Definition: enum_map.hpp:74
basic_address< false > address
Type alias for non-const memory address values.
Definition: address.hpp:203
virtual auto type_id() -> identifier=0
Returns a description identifier of the implementation.
void add_factory(std::unique_ptr< connection_factory > factory)
Adds a new connection factory.
@ kind
The node kind has appeared or changed.
void setup_connectors(connection_user &target)
Sets up connectors connecting to the default address.
Definition: conn_setup.hpp:113
void setup_connectors(connection_user &target, connection_kinds kinds)
Sets up connectors connecting to the default address.
Definition: conn_setup.hpp:132
connection_kind
Message bus connection kind bits enumeration.
Definition: connection_kind.hpp:21
void default_init()
Uses the configuration to do initialization of this setup.
Definition: conn_setup.hpp:166
void setup_acceptors(acceptor_user &target, connection_kind kind, identifier address)
Sets up acceptors listening on the specified address.
Definition: conn_setup.hpp:92
void setup_acceptors(acceptor_user &target, connection_kinds kinds)
Sets up acceptors listening on the default address.
Definition: conn_setup.hpp:81
void setup_acceptors(acceptor_user &target, connection_kinds kinds, identifier address)
Sets up acceptors listening on the specified address.
Definition: conn_setup.hpp:73
Class setting up connections based from configuration.
Definition: conn_setup.hpp:45
void setup_acceptors(acceptor_user &target, identifier address)
Sets up acceptors listening on the specified address.
Definition: conn_setup.hpp:57
void setup_connectors(connection_user &target, connection_kind kind)
Sets up connectors connecting to the default address.
Definition: conn_setup.hpp:151
basic_identifier< 10, 6, default_identifier_char_set, identifier_t > identifier
Default identifier type used throughout the project.
Definition: identifier.hpp:346

Copyright © 2015-2021 Matúš Chochlík.
<chochlik -at -gmail.com>
Documentation generated on Tue Apr 13 2021 by Doxygen (version 1.8.17).