mirror of
https://github.com/rstrouse/ESPSomfy-RTS.git
synced 2026-10-31 13:52:15 +01:00
Socket events that don't fit the static buffer are logged and not sent. The state events are small (shadeState is about 400 bytes), but remoteFrame lists up to 300 pulse timings and real frames already came to 1.8-2.1 KB against the 2 KB buffer. MAX_SOCK_RESPONSE is now 4096 in SocketEmitter.h, and a static_assert next to remoteFrame fails the build if 300 pulses of 10 digits no longer fit. KNOWN_ISSUES.md closes the entry with the bounds of every event. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
41 lines
1.2 KiB
C++
41 lines
1.2 KiB
C++
#include <ESPAsyncWebServer.h>
|
|
#include "WResp.h"
|
|
#ifndef sockets_h
|
|
#define sockets_h
|
|
|
|
#define SOCK_MAX_ROOMS 1
|
|
#define ROOM_EMIT_FRAME 0
|
|
// The buffer every socket event is formatted into. An event that doesn't
|
|
// fit is logged and not sent, so the largest one has to fit: see remoteFrame
|
|
// in Transceiver.cpp.
|
|
#define MAX_SOCK_RESPONSE 4096
|
|
|
|
struct room_t {
|
|
uint8_t clients[5] = {255, 255, 255, 255, 255};
|
|
uint8_t activeClients();
|
|
bool isJoined(uint8_t num);
|
|
bool join(uint8_t num);
|
|
bool leave(uint8_t num);
|
|
void clear();
|
|
};
|
|
class SocketEmitter {
|
|
protected:
|
|
uint8_t newclients = 0;
|
|
uint8_t newClients[5] = {255,255,255,255,255};
|
|
void delayInit(uint8_t num);
|
|
public:
|
|
JsonSockEvent json;
|
|
room_t rooms[SOCK_MAX_ROOMS];
|
|
uint8_t activeClients(uint8_t room);
|
|
void initClients();
|
|
void startup();
|
|
void begin();
|
|
void loop();
|
|
void end();
|
|
void disconnect();
|
|
JsonSockEvent * beginEmit(const char *evt);
|
|
void endEmit(uint8_t num = 255);
|
|
void endEmitRoom(uint8_t num);
|
|
static void wsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len);
|
|
};
|
|
#endif
|