70 return id.as_string().value();
73 return id.to_string();
78 size_t chunkSize =
mReader.nextChunkSize();
86 if (chunkSize <=
sizeof(stackBuf)) {
105 if (
json[
"method"].as_string() ==
"rpc.ping") {
146 if (msg[
"result"][
"acknowledged"].as_bool() ==
true) {
175 if (msg[
"result"][
"acknowledged"].as_bool() ==
true) {
191 if (msg[
"result"][
"stop"].as_bool() ==
true) {
193 if (msg[
"result"].contains(
"value")) {
212 request.
set(
"jsonrpc",
"2.0");
213 request.
set(
"method", method);
214 request.
set(
"params", params);
215 request.
set(
"id",
id);
239 request.
set(
"jsonrpc",
"2.0");
240 request.
set(
"method", method);
241 request.
set(
"params", params);
242 request.
set(
"id",
id);
258 ps.updateCallback = updateCb;
304 if (needed <=
sizeof(stackBuf)) {
310 size_t written =
mWriter.writeChunk(
399 heartbeat.
set(
"jsonrpc",
"2.0");
400 heartbeat.
set(
"method",
"rpc.ping");
432 if (bytesRead == 0) {
const char * c_str() const FL_NOEXCEPT
fl::size size() const FL_NOEXCEPT
bool is_null() const FL_NOEXCEPT
bool contains(size_t idx) const FL_NOEXCEPT
void set(const fl::string &key, const json &value) FL_NOEXCEPT
static json parse(const fl::string &txt) FL_NOEXCEPT
static json object() FL_NOEXCEPT
static size_t chunkOverhead(size_t dataLen)
void writeResponse(const fl::json &response)
Write JSON-RPC response to stream.
bool resolveRpc(const fl::json &msg, const fl::string &idKey)
StreamHandle rpcStream(const fl::string &method, const fl::json ¶ms)
Send a streaming JSON-RPC request, returns StreamHandle for intermediate data.
fl::task::Promise< fl::json > rpc(const fl::string &method, const fl::json ¶ms)
Send a JSON-RPC request, returns promise that resolves with the final response.
bool processIncomingData()
void setOnDisconnect(StateCallback callback)
Set callback for connection lost.
virtual void triggerReconnect()
Trigger reconnection (for subclasses to override)
fl::flat_map< fl::string, PendingCall, fl::StringFastLess > mPendingCalls
virtual int recvData(fl::span< u8 > buffer)=0
Receive raw data from connection.
void handleConnectionStateChange(u32 currentTimeMs)
void update(u32 currentTimeMs)
Update connection state (handles reconnection, heartbeat) Call this in main loop.
virtual u32 getCurrentTimeMs() const
Get current time in milliseconds.
u32 mLastHeartbeatReceived
fl::vector< fl::json > mIncomingQueue
void setHeartbeatInterval(u32 intervalMs)
Set heartbeat interval.
fl::function< void()> StateCallback
Connection state callback.
virtual bool isConnected() const =0
Check if connected.
void setOnConnect(StateCallback callback)
Set callback for connection established.
fl::flat_map< fl::string, PendingStream, fl::StringFastLess > mPendingStreams
virtual ~HttpStreamTransport() FL_NOEXCEPT
Virtual destructor.
void setTimeout(u32 timeoutMs)
Set connection timeout.
fl::optional< fl::json > readRequest()
Read next JSON-RPC request from stream Non-blocking, returns nullopt if no complete request available...
HttpStreamTransport(const fl::string &host, u16 port, u32 heartbeatIntervalMs=30000)
Constructor.
void parseChunkedMessages()
void checkHeartbeatTimeout(u32 currentTimeMs)
virtual void disconnect()=0
Disconnect from server.
static fl::string idToString(const fl::json &id)
StateCallback mOnDisconnect
u32 getTimeout() const
Get connection timeout.
u32 getHeartbeatInterval() const
Get heartbeat interval.
HttpConnection mConnection
virtual int sendData(fl::span< const u8 > data)=0
Send raw data over connection.
bool resolveRpcStream(const fl::json &msg, const fl::string &idKey)
fl::shared_ptr< fl::function< void(const fl::json &)> > updateCallback
fl::task::Promise< fl::json > promise
fl::task::Promise< fl::json > promise
fl::task::Promise< fl::json > & promise()
Access the underlying promise.
StreamHandle() FL_NOEXCEPT=default
StreamHandle & onData(fl::function< void(const fl::json &)> cb)
Register callback for intermediate stream data.
StreamHandle & catch_(fl::function< void(const fl::task::Error &)> cb)
Register callback for errors.
fl::task::Promise< fl::json > mPromise
fl::shared_ptr< fl::function< void(const fl::json &)> > mUpdateCallback
StreamHandle & then(fl::function< void(const fl::json &)> cb)
Register callback for final result.
bool valid() const
Check if handle is valid.
Handle for ASYNC_STREAM calls Provides onData() for intermediate updates, plus then()/catch_() for fi...
const T * data() const FL_NOEXCEPT
bool complete_with_value(const T &value) FL_NOEXCEPT
Complete the Promise with a result (used by networking library)
static Promise< T > create() FL_NOEXCEPT
Create a pending Promise.
bool complete_with_error(const Error &error) FL_NOEXCEPT
Complete the Promise with an error (used by networking library)
Promise class that provides fluent .then() and .catch_() semantics This is a lightweight wrapper arou...
void reserve(fl::size n) FL_NOEXCEPT
void push_back(const T &value) FL_NOEXCEPT
void resize(fl::size n) FL_NOEXCEPT
FastLED's Elegant JSON Library: fl::json
constexpr remove_reference< T >::type && move(T &&t) FL_NOEXCEPT
constexpr remove_reference< T >::type && move(T &&t) FL_NOEXCEPT
constexpr int type_rank< T >::value
fl::u32 millis()
Universal millisecond timer - returns milliseconds since system startup.
int snprintf(char *buffer, fl::size size, const char *format, const Args &... args) FL_NOEXCEPT
Snprintf-like formatting function that writes to a buffer.
shared_ptr< T > make_shared(Args &&... args) FL_NOEXCEPT
expected< T, E > result
Alias for expected (Rust-style naming)
constexpr nullopt_t nullopt
Base definition for an LED controller.