FastLED 3.10.8
Loading...
Searching...
No Matches
connection.h
Go to the documentation of this file.
1#pragma once
2
4#include "fl/stl/stdint.h"
5#include "fl/stl/noexcept.h"
6
7namespace fl {
8
9// Connection states for HTTP streaming
10enum class ConnectionState {
11 DISCONNECTED, // Not connected, idle
12 CONNECTING, // Connection attempt in progress
13 CONNECTED, // Connected and active
14 RECONNECTING, // Reconnection attempt after failure
15 CLOSED // Connection permanently closed (user requested)
16};
17
18// Connection configuration
20 // Reconnection settings
21 u32 reconnectInitialDelayMs = 1000; // Initial delay: 1s
22 u32 reconnectMaxDelayMs = 30000; // Max delay: 30s
23 u32 reconnectBackoffMultiplier = 2; // Exponential backoff multiplier
24
25 // Heartbeat settings
26 u32 heartbeatIntervalMs = 30000; // Send heartbeat every 30s
27
28 // Timeout settings
29 u32 connectionTimeoutMs = 60000; // Detect dead connection after 60s
30
31 // Max reconnection attempts (0 = infinite)
33};
34
35// HttpConnection: Manages connection lifecycle and state transitions
37public:
39
40 // State management
42 bool isConnected() const FL_NO_EXCEPT;
43 bool isDisconnected() const FL_NO_EXCEPT;
44 bool shouldReconnect() const FL_NO_EXCEPT;
45
46 // Connection control
47 void connect() FL_NO_EXCEPT; // Initiate connection
48 void disconnect() FL_NO_EXCEPT; // Graceful disconnect
49 void close() FL_NO_EXCEPT; // Permanent close (no reconnect)
50
51 // Connection events (call these from transport layer)
52 void onConnected(u32 currentTimeMs = 0) FL_NO_EXCEPT; // Connection established
53 void onDisconnected() FL_NO_EXCEPT; // Connection lost
54 void onError() FL_NO_EXCEPT; // Connection error
55
56 // Asio-compatible: handle connection event from error_code
57 void onEvent(const asio::error_code& ec, u32 currentTimeMs = 0) FL_NO_EXCEPT;
58
59 // Heartbeat management
60 void onHeartbeatSent() FL_NO_EXCEPT; // Called when heartbeat sent
61 void onHeartbeatReceived() FL_NO_EXCEPT; // Called when heartbeat/data received
62 bool shouldSendHeartbeat(u32 currentTimeMs) const FL_NO_EXCEPT;
63
64 // Update loop (call regularly)
65 void update(u32 currentTimeMs) FL_NO_EXCEPT;
66
67 // Reconnection state
70
71 // Timeout detection
72 bool isTimedOut(u32 currentTimeMs) const FL_NO_EXCEPT;
73
74private:
77
78 // Reconnection state
82 bool mWasReconnecting; // Track if we were in RECONNECTING before CONNECTING
83
84 // Heartbeat state
87
88 // State transition helpers
89 void transitionTo(ConnectionState newState, u32 currentTimeMs) FL_NO_EXCEPT;
93};
94
95} // namespace fl
bool shouldReconnect() const FL_NO_EXCEPT
bool isTimedOut(u32 currentTimeMs) const FL_NO_EXCEPT
void onHeartbeatReceived() FL_NO_EXCEPT
void onHeartbeatSent() FL_NO_EXCEPT
void onEvent(const asio::error_code &ec, u32 currentTimeMs=0) FL_NO_EXCEPT
void update(u32 currentTimeMs) FL_NO_EXCEPT
void connect() FL_NO_EXCEPT
void onError() FL_NO_EXCEPT
void resetReconnectAttempts() FL_NO_EXCEPT
HttpConnection(const ConnectionConfig &config=ConnectionConfig()) FL_NO_EXCEPT
void disconnect() FL_NO_EXCEPT
ConnectionConfig mConfig
Definition connection.h:75
void transitionTo(ConnectionState newState, u32 currentTimeMs) FL_NO_EXCEPT
void onConnected(u32 currentTimeMs=0) FL_NO_EXCEPT
u32 getReconnectAttempts() const FL_NO_EXCEPT
u32 calculateBackoffDelay() const FL_NO_EXCEPT
void close() FL_NO_EXCEPT
void resetReconnectState() FL_NO_EXCEPT
void onDisconnected() FL_NO_EXCEPT
bool isConnected() const FL_NO_EXCEPT
bool shouldSendHeartbeat(u32 currentTimeMs) const FL_NO_EXCEPT
bool isDisconnected() const FL_NO_EXCEPT
ConnectionState mState
Definition connection.h:76
u32 getReconnectDelayMs() const FL_NO_EXCEPT
ConnectionState getState() const FL_NO_EXCEPT
ConnectionState
Definition connection.h:10
u8 u8 fract8 blur_amount FL_NO_EXCEPT
Definition blur.h:186
Base definition for an LED controller.
Definition crgb.hpp:179
Asio-compatible error code: numeric code + optional human-readable message.
Definition error_code.h:31