100 {
103
104 }
105
106 Serial.println(
"\n=== HTTP RPC Bidirectional Example ===\n");
107 Serial.println(
"This example demonstrates server + client in one process:");
108 Serial.println(
" - Server listens on port 8080");
109 Serial.println(
" - Client connects to localhost:8080");
110 Serial.println(
" - All three RPC modes demonstrated");
112
113
118
119
120 Serial.println(
"Starting HTTP server on port 8080...");
121
125
126
128 Serial.println(
"[SERVER] Client connected!");
131 });
132
134 Serial.println(
"[SERVER] Client disconnected!");
137 });
138
139
143 );
144
145
146
147
149 int a = 0, b = 0;
151 auto aOpt = params[0].
as_int();
152 auto bOpt = params[1].
as_int();
153 if (aOpt && bOpt) {
154 a = *aOpt;
155 b = *bOpt;
156 }
157 }
159 fl::printf(
"[SERVER] add(%d, %d) = %d\n", a, b, result);
161 });
162
163
165
167 ack.
set(
"ack",
true);
169
170
171 int duration = 1000;
173 auto durationOpt = params[0].
as_int();
174 if (durationOpt) {
175 duration = *durationOpt;
176 }
177 }
178
179 fl::printf(
"[SERVER] longTask(%d) - ACK sent\n", duration);
180
181
185 }
186
187
190 result.set(
"duration", duration);
192
193 fl::printf(
"[SERVER] longTask(%d) - DONE\n", duration);
195
196
198
200 ack.
set(
"ack",
true);
202
203
204 int count = 5;
206 auto countOpt = params[0].
as_int();
207 if (countOpt) {
208 count = *countOpt;
209 }
210 }
211
212 fl::printf(
"[SERVER] streamData(%d) - ACK sent\n", count);
213
214
215 for (int i = 0; i < count; i++) {
217 update.
set(
"update", i);
219 fl::printf(
"[SERVER] streamData - update %d/%d\n", i + 1, count);
221 }
222
223
225 final.set("value", count);
227
228 fl::printf(
"[SERVER] streamData(%d) - DONE\n", count);
230
231
233 Serial.println(
"ERROR: Failed to start server!");
234 return;
235 }
236 Serial.println(
"✓ Server started successfully");
238 Serial.print(
" Listening on port: ");
239 Serial.println(actualPort);
241
242
245
246
247
248
250
251
253
254 Serial.println(
"Connecting client to server...");
255
259
260
262 Serial.println(
"[CLIENT] Connected to server!");
265 });
266
268 Serial.println(
"[CLIENT] Disconnected from server!");
272 });
273
274
278 );
279
280
282 Serial.println(
"ERROR: Failed to connect to server!");
283 return;
284 }
285
286 Serial.println(
"✓ Client connected successfully\n");
287 Serial.println(
"Starting test sequence...\n");
288}
FL_DISABLE_WARNING_PUSH FL_DISABLE_WARNING_GLOBAL_CONSTRUCTORS CFastLED FastLED
Global LED strip management instance.
static ServerCleanup serverCleanup
fl::unique_ptr< fl::Remote > clientRemote
std::atomic< bool > serverRunning(false)
fl::unique_ptr< fl::net::http::HttpStreamClient > clientTransport
fl::unique_ptr< fl::net::http::HttpStreamServer > serverTransport
fl::unique_ptr< fl::Remote > serverRemote
static void addListener(Listener *listener, int priority=0) FL_NOEXCEPT
void send(const fl::json &result)
Send a single response (for ASYNC mode)
void sendFinal(const fl::json &result)
Send final response and mark stream as complete (for ASYNC_STREAM mode)
void sendUpdate(const fl::json &update)
Send intermediate streaming update (for ASYNC_STREAM mode)
Helper class for sending responses in async/streaming RPC methods.
fl::optional< i64 > as_int() const FL_NOEXCEPT
bool is_array() const FL_NOEXCEPT
size_t size() const FL_NOEXCEPT
void set(const fl::string &key, const json &value) FL_NOEXCEPT
static json object() FL_NOEXCEPT
void fill_solid(CRGB *targetArray, int numToFill, const CRGB &color) FL_NOEXCEPT
Fill a range of LEDs with a solid color.
fl::u32 millis()
Universal millisecond timer - returns milliseconds since system startup.
void printf(const char *format, const Args &... args) FL_NOEXCEPT
Printf-like formatting function that prints directly to the platform output.
fl::enable_if<!fl::is_array< T >::value, unique_ptr< T > >::type make_unique(Args &&... args) FL_NOEXCEPT
void delay(u32 ms, bool run_async=true) FL_NOEXCEPT
Public delay wrapper that keeps bare Arduino delay() preferred after using fl::delay; while still all...
expected< T, E > result
Alias for expected (Rust-style naming)
@ Green
<div style='background:#008000;width:4em;height:4em;'></div>
@ Red
<div style='background:#FF0000;width:4em;height:4em;'></div>
@ Blue
<div style='background:#0000FF;width:4em;height:4em;'></div>
@ Black
<div style='background:#000000;width:4em;height:4em;'></div>