MayaFlux 0.4.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 218 of file NetworkSubsystem.cpp.

219{
220 if (!backend) {
221 return false;
222 }
223
224 NetworkTransport transport = backend->get_transport();
225
226 std::unique_lock lock(m_backends_mutex);
227
228 if (m_backends.contains(transport)) {
230 "Network backend {} already registered", backend->get_name());
231 return false;
232 }
233
234 if (!backend->initialize()) {
236 "Failed to initialize network backend: {}", backend->get_name());
237 return false;
238 }
239
240 backend->set_receive_callback(
241 [this](uint64_t id, const uint8_t* data, size_t size, std::string_view addr) {
242 on_backend_receive(id, data, size, addr);
243 });
244
245 backend->set_state_callback(
246 [this](const EndpointInfo& info, EndpointState prev, EndpointState curr) {
247 on_backend_state_change(info, prev, curr);
248 });
249
250 if (auto* tcp = dynamic_cast<TCPBackend*>(backend.get())) {
251 tcp->set_endpoint_id_allocator([this]() -> uint64_t {
252 return m_next_endpoint_id.fetch_add(1);
253 });
254 }
255
257 "Added network backend: {}", backend->get_name());
258
259 m_backends[transport] = std::move(backend);
260 return true;
261}
#define MF_INFO(comp, ctx,...)
#define MF_ERROR(comp, ctx,...)
#define MF_WARN(comp, ctx,...)
Range size
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, MayaFlux::Journal::NetworkSubsystem, and size.