115 void update(u32 currentTimeMs);
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.
virtual bool connect()=0
Connect to server.
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
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)
Base class for HTTP streaming transport Implements RequestSource and ResponseSink for Remote class Ma...
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.
friend class HttpStreamTransport
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...
Promise class that provides fluent .then() and .catch_() semantics This is a lightweight wrapper arou...
Base definition for an LED controller.
Promise-based fluent API for FastLED - standalone async primitives.