MayaFlux 0.5.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ add_backend()

bool MayaFlux::Core::NetworkSubsystem::add_backend ( std::unique_ptr< INetworkBackend backend)

Add a network backend.

Parameters
backendBackend instance (takes ownership)
Returns
true if added successfully

Only one backend per NetworkTransport type is permitted.

Definition at line 199 of file NetworkSubsystem.cpp.

200{
201 if (!backend) {
202 return false;
203 }
204
205 NetworkTransport transport = backend->get_transport();
206
207 std::unique_lock lock(m_backends_mutex);
208
209 if (m_backends.contains(transport)) {
211 "Network backend {} already registered", backend->get_name());
212 return false;
213 }
214
215 if (!backend->initialize()) {
217 "Failed to initialize network backend: {}", backend->get_name());
218 return false;
219 }
220
221 backend->set_receive_callback(
222 [this](uint64_t id, const uint8_t* data, size_t size, std::string_view addr) {
223 on_backend_receive(id, data, size, addr);
224 });
225
226 backend->set_state_callback(
227 [this](const EndpointInfo& info, EndpointState prev, EndpointState curr) {
228 on_backend_state_change(info, prev, curr);
229 });
230
231 if (auto* tcp = dynamic_cast<TCPBackend*>(backend.get())) {
232 tcp->set_endpoint_id_allocator([this]() -> uint64_t {
233 return m_next_endpoint_id.fetch_add(1);
234 });
235 }
236
238 "Added network backend: {}", backend->get_name());
239
240 m_backends[transport] = std::move(backend);
241 return true;
242}
#define MF_INFO(comp, ctx,...)
#define MF_ERROR(comp, ctx,...)
#define MF_WARN(comp, ctx,...)
std::atomic< uint64_t > m_next_endpoint_id
Global endpoint id counter shared across all backends.
void on_backend_state_change(const EndpointInfo &info, EndpointState previous, EndpointState current)
Wired as the state callback on each backend.
void on_backend_receive(uint64_t endpoint_id, const uint8_t *data, size_t size, std::string_view sender_addr)
Wired as the receive callback on each backend.
std::unordered_map< NetworkTransport, std::unique_ptr< INetworkBackend > > m_backends
EndpointState
Observable connection state for an endpoint.
NetworkTransport
Identifies the transport protocol a backend implements.
@ NetworkSubsystem
Network subsystem operations (endpoint management, data routing)
@ Core
Core engine, backend, subsystems.

References MayaFlux::Journal::Core, MF_ERROR, MF_INFO, MF_WARN, and MayaFlux::Journal::NetworkSubsystem.