MayaFlux 1.0.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
GlobalNetworkConfig.hpp
Go to the documentation of this file.
1#pragma once
2
4
5#if defined(_WIN32) || defined(_WIN64)
6#ifdef ERROR
7#undef ERROR
8#endif
9#endif
10
11namespace MayaFlux::Core {
12
13/**
14 * @enum NetworkTransport
15 * @brief Identifies the transport protocol a backend implements
16 */
17enum class NetworkTransport : uint8_t {
18 UDP,
19 TCP,
21};
22
23/**
24 * @enum EndpointRole
25 * @brief Whether an endpoint sends, receives, or both
26 */
27enum class EndpointRole : uint8_t {
28 SEND,
29 RECEIVE,
31};
32
33/**
34 * @enum EndpointState
35 * @brief Observable connection state for an endpoint
36 */
37enum class EndpointState : uint8_t {
38 CLOSED,
39 OPENING,
40 OPEN,
41 ERROR,
43};
44
45/**
46 * @struct EndpointInfo
47 * @brief Describes one logical send/receive endpoint managed by a backend
48 *
49 * Analogous to InputDeviceInfo for InputSubsystem. An endpoint is the
50 * network equivalent of a device: something you open, send/receive
51 * through, and close.
52 */
53struct MAYAFLUX_API EndpointInfo {
54 uint64_t id {};
55 NetworkTransport transport { NetworkTransport::UDP };
56 EndpointRole role { EndpointRole::BIDIRECTIONAL };
57 EndpointState state { EndpointState::CLOSED };
58 std::string label;
59 std::string remote_address;
60 uint16_t remote_port {};
61 uint16_t local_port {};
62};
63
64/**
65 * @struct NetworkMessage
66 * @brief A received datagram or framed message with sender metadata
67 *
68 * Passed to receive callbacks. Also the natural return type for a
69 * future NetworkAwaiter (Kriya::NetworkReceive) if condition-driven
70 * coroutine support is added later, following the EventAwaiter model.
71 */
73 uint64_t endpoint_id {};
74 std::vector<uint8_t> data;
75 std::string sender_address;
76};
77
78// ─────────────────────────────────────────────────────────────────────────────
79// Per-backend configuration structs
80// ─────────────────────────────────────────────────────────────────────────────
81
82/**
83 * @struct UDPBackendInfo
84 * @brief Configuration for the UDP transport backend
85 *
86 * UDP handles connectionless datagrams. OSC, simple parameter
87 * broadcast, and low-latency control messages ride on top of this.
88 */
89struct MAYAFLUX_API UDPBackendInfo {
90 bool enabled { false };
91 uint16_t default_receive_port { 8000 };
92 uint16_t default_send_port { 9000 };
93 std::string default_send_address { "127.0.0.1" };
94 size_t receive_buffer_size { 65536 };
95 bool enable_broadcast { false };
96 bool enable_multicast { false };
97 std::string multicast_group;
98
99 static constexpr auto describe()
100 {
101 return std::make_tuple(
102 Reflect::member("enabled", &UDPBackendInfo::enabled),
103 Reflect::member("default_receive_port", &UDPBackendInfo::default_receive_port),
104 Reflect::member("default_send_port", &UDPBackendInfo::default_send_port),
105 Reflect::member("default_send_address", &UDPBackendInfo::default_send_address),
106 Reflect::member("receive_buffer_size", &UDPBackendInfo::receive_buffer_size),
107 Reflect::member("enable_broadcast", &UDPBackendInfo::enable_broadcast),
108 Reflect::member("enable_multicast", &UDPBackendInfo::enable_multicast),
109 Reflect::member("multicast_group", &UDPBackendInfo::multicast_group));
110 }
111};
112
113/**
114 * @struct TCPBackendInfo
115 * @brief Configuration for the TCP transport backend
116 *
117 * TCP handles reliable, ordered byte streams. Bulk audio/video/tensor
118 * data, model weight transfer, and any payload where completeness
119 * matters more than latency.
120 */
121struct MAYAFLUX_API TCPBackendInfo {
122 bool enabled { false };
123 uint16_t listen_port { 0 };
124 size_t receive_buffer_size { 1048576 };
125 bool auto_reconnect { true };
126 uint32_t reconnect_interval_ms { 2000 };
127 uint32_t connect_timeout_ms { 5000 };
128
129 static constexpr auto describe()
130 {
131 return std::make_tuple(
132 Reflect::member("enabled", &TCPBackendInfo::enabled),
133 Reflect::member("listen_port", &TCPBackendInfo::listen_port),
134 Reflect::member("receive_buffer_size", &TCPBackendInfo::receive_buffer_size),
135 Reflect::member("auto_reconnect", &TCPBackendInfo::auto_reconnect),
136 Reflect::member("reconnect_interval_ms", &TCPBackendInfo::reconnect_interval_ms),
137 Reflect::member("connect_timeout_ms", &TCPBackendInfo::connect_timeout_ms));
138 }
139};
140
141/**
142 * @struct SharedMemoryBackendInfo
143 * @brief Configuration for local inter-process shared memory transport
144 *
145 * Zero-copy data exchange between processes on the same machine.
146 * Useful for multi-instance MayaFlux, bridging to Python inference
147 * servers without serialization overhead, or DAW plugin hosting.
148 */
149struct MAYAFLUX_API SharedMemoryBackendInfo {
150 bool enabled { false };
151 std::string segment_name { "mayaflux_shm" };
152 size_t segment_size { 16 * 1024 * 1024 };
153
154 static constexpr auto describe()
155 {
156 return std::make_tuple(
157 Reflect::member("enabled", &SharedMemoryBackendInfo::enabled),
158 Reflect::member("segment_name", &SharedMemoryBackendInfo::segment_name),
159 Reflect::member("segment_size", &SharedMemoryBackendInfo::segment_size));
160 }
161};
162
163// ─────────────────────────────────────────────────────────────────────────────
164// Global configuration
165// ─────────────────────────────────────────────────────────────────────────────
166
167/**
168 * @struct GlobalNetworkConfig
169 * @brief Configuration for the NetworkSubsystem
170 *
171 * Passed to NetworkSubsystem during construction. Mirrors the pattern
172 * established by GlobalInputConfig for InputSubsystem.
173 *
174 * @code
175 * GlobalNetworkConfig net_config;
176 * net_config.udp.enabled = true;
177 * net_config.udp.default_receive_port = 7000;
178 * net_config.tcp.enabled = true;
179 * auto net_subsystem = std::make_unique<NetworkSubsystem>(net_config);
180 * @endcode
181 */
182struct MAYAFLUX_API GlobalNetworkConfig {
186
187 static GlobalNetworkConfig with_udp(uint16_t recv_port = 8000, uint16_t send_port = 9000)
188 {
189 GlobalNetworkConfig config;
190 config.udp.enabled = true;
191 config.udp.default_receive_port = recv_port;
192 config.udp.default_send_port = send_port;
193 return config;
194 }
195
196 static GlobalNetworkConfig with_tcp(uint16_t listen_port = 0)
197 {
198 GlobalNetworkConfig config;
199 config.tcp.enabled = true;
200 config.tcp.listen_port = listen_port;
201 return config;
202 }
203
204 static GlobalNetworkConfig with_osc(uint16_t recv_port = 8000, uint16_t send_port = 9000)
205 {
206 return with_udp(recv_port, send_port);
207 }
208
209 [[nodiscard]] bool any_enabled() const
210 {
211 return udp.enabled || tcp.enabled || shared_memory.enabled;
212 }
213
214 static constexpr auto describe()
215 {
216 return std::make_tuple(
217 Reflect::member("udp", &GlobalNetworkConfig::udp),
218 Reflect::member("tcp", &GlobalNetworkConfig::tcp),
219 Reflect::member("shared_memory", &GlobalNetworkConfig::shared_memory));
220 }
221};
222
223} // namespace MayaFlux::Core
EndpointState
Observable connection state for an endpoint.
NetworkTransport
Identifies the transport protocol a backend implements.
EndpointRole
Whether an endpoint sends, receives, or both.
Describes one logical send/receive endpoint managed by a backend.
static GlobalNetworkConfig with_tcp(uint16_t listen_port=0)
static GlobalNetworkConfig with_udp(uint16_t recv_port=8000, uint16_t send_port=9000)
static GlobalNetworkConfig with_osc(uint16_t recv_port=8000, uint16_t send_port=9000)
Configuration for the NetworkSubsystem.
A received datagram or framed message with sender metadata.
Configuration for local inter-process shared memory transport.
Configuration for the TCP transport backend.
Configuration for the UDP transport backend.