FastLED 3.9.15
Loading...
Searching...
No Matches
server.cpp.hpp
Go to the documentation of this file.
2#include "fl/stl/json.h"
3#include "fl/stl/cstddef.h"
4#include "fl/stl/move.h"
5#include "fl/stl/optional.h"
6#include "fl/stl/vector.h"
7
8namespace fl {
9
11 : mRequestSource([]() { return fl::nullopt; })
12 , mResponseSink([](const fl::json&) {})
13{}
14
16 : mRequestSource(fl::move(source))
17 , mResponseSink(fl::move(sink))
18{}
19
23
27
31
33 size_t processed = pull();
34 size_t sent = push();
35 return processed + sent;
36}
37
38size_t Server::pull() {
40 return 0;
41 }
42
43 size_t processed = 0;
44
45 // Pull JSON-RPC requests from source until none available
46 while (auto optRequest = mRequestSource()) {
47 fl::json request = fl::move(*optRequest);
48
49 // Process request through handler
50 fl::json response = mRequestHandler(request);
51
52 // Queue response (skip scheduled acknowledgments and async skip markers)
53 bool isScheduledAck = response.contains("scheduled") && response["scheduled"].as_bool().value_or(false);
54 bool isAsyncSkip = response.contains("__skip") && response["__skip"].as_bool().value_or(false);
55 if (!response.is_null() && !isScheduledAck && !isAsyncSkip) {
56 mOutgoingQueue.push_back(fl::move(response));
57 }
58
59 processed++;
60 }
61
62 return processed;
63}
64
65size_t Server::push() {
66 if (!mResponseSink) {
67 return 0;
68 }
69
70 size_t sent = 0;
71
72 // Push queued responses
73 while (!mOutgoingQueue.empty()) {
75 mOutgoingQueue.erase(mOutgoingQueue.begin());
76 sent++;
77 }
78
79 return sent;
80}
81
82} // namespace fl
size_t push()
Push queued responses to sink.
size_t update()
Main update: pull + push.
fl::vector< fl::json > mOutgoingQueue
Definition server.h:91
void setRequestSource(RequestSource source)
Set request source callback.
size_t pull()
Pull requests from source, process, queue responses.
fl::function< fl::optional< fl::json >()> RequestSource
Definition server.h:29
void setRequestHandler(RequestHandler handler)
Set request handler.
RequestHandler mRequestHandler
Definition server.h:90
RequestSource mRequestSource
Definition server.h:88
void setResponseSink(ResponseSink sink)
Set response sink callback.
Server() FL_NOEXCEPT
Default constructor.
fl::function< void(const fl::json &)> ResponseSink
Definition server.h:30
fl::function< fl::json(const fl::json &)> RequestHandler
Definition server.h:31
ResponseSink mResponseSink
Definition server.h:89
FastLED's Elegant JSON Library: fl::json
constexpr remove_reference< T >::type && move(T &&t) FL_NOEXCEPT
Definition s16x16x4.h:28
constexpr remove_reference< T >::type && move(T &&t) FL_NOEXCEPT
Definition move.h:28
constexpr nullopt_t nullopt
Definition optional.h:13
Base definition for an LED controller.
Definition crgb.hpp:179