update to async web server

This commit is contained in:
cjkas 2026-03-24 08:02:10 +01:00
parent 73f39d67c3
commit a55dc7f66b
8 changed files with 1089 additions and 2966 deletions

View file

@ -1,4 +1,6 @@
#include "WResp.h"
#include <WebServer.h>
#include <esp_task_wdt.h>
void JsonSockEvent::beginEvent(AsyncWebSocket *server, const char *evt, char *buff, size_t buffSize) {
this->server = server;
this->buff = buff;
@ -69,6 +71,7 @@ void JsonResponse::_safecat(const char *val, bool escape) {
}
void AsyncJsonResp::beginResponse(AsyncWebServerRequest *request, char *buff, size_t buffSize) {
this->_request = request;
this->buff = buff;
this->buffSize = buffSize;
this->buff[0] = 0x00;
@ -78,6 +81,9 @@ void AsyncJsonResp::beginResponse(AsyncWebServerRequest *request, char *buff, si
}
void AsyncJsonResp::endResponse() {
if(strlen(this->buff)) this->flush();
if(this->_request && this->_stream) {
this->_request->send(this->_stream);
}
}
void AsyncJsonResp::flush() {
if(this->_stream && strlen(this->buff) > 0) {

View file

@ -1,10 +1,10 @@
#include <WebServer.h>
#include <esp_task_wdt.h>
#include <ESPAsyncWebServer.h>
#include "Somfy.h"
#ifndef wresp_h
#define wresp_h
class WebServer;
class JsonFormatter {
protected:
char *buff;
@ -66,6 +66,7 @@ class JsonResponse : public JsonFormatter {
class AsyncJsonResp : public JsonFormatter {
protected:
void _safecat(const char *val, bool escape = false) override;
AsyncWebServerRequest *_request = nullptr;
AsyncResponseStream *_stream = nullptr;
public:
void beginResponse(AsyncWebServerRequest *request, char *buff, size_t buffSize);

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,3 @@
#include <WebServer.h>
#include <ESPAsyncWebServer.h>
#include <AsyncJson.h>
#include "Somfy.h"
@ -7,45 +6,18 @@
class Web {
public:
bool uploadSuccess = false;
void sendCORSHeaders(WebServer &server);
void sendCacheHeaders(uint32_t seconds=604800);
void startup();
void handleLogin(WebServer &server);
void handleLogout(WebServer &server);
void handleStreamFile(WebServer &server, const char *filename, const char *encoding);
void handleController(WebServer &server);
void handleLoginContext(WebServer &server);
void handleGetRepeaters(WebServer &server);
void handleGetRooms(WebServer &server);
void handleGetShades(WebServer &server);
void handleGetGroups(WebServer &server);
void handleShadeCommand(WebServer &server);
void handleRepeatCommand(WebServer &server);
void handleGroupCommand(WebServer &server);
void handleTiltCommand(WebServer &server);
void handleDiscovery(WebServer &server);
void handleNotFound(WebServer &server);
void handleRoom(WebServer &server);
void handleShade(WebServer &server);
void handleGroup(WebServer &server);
void handleSetPositions(WebServer &server);
void handleSetSensor(WebServer &server);
void handleDownloadFirmware(WebServer &server);
void handleBackup(WebServer &server, bool attach = false);
void handleReboot(WebServer &server);
void handleDeserializationError(WebServer &server, DeserializationError &err);
void begin();
void loop();
void end();
// Web Handlers
// Auth helpers
bool createAPIToken(const IPAddress ipAddress, char *token);
bool createAPIToken(const char *payload, char *token);
bool createAPIPinToken(const IPAddress ipAddress, const char *pin, char *token);
bool createAPIPasswordToken(const IPAddress ipAddress, const char *username, const char *password, char *token);
bool isAuthenticated(WebServer &server, bool cfg = false);
bool isAuthenticated(AsyncWebServerRequest *request, bool cfg = false);
// Async API handler overloads (port 8081)
// Async API handlers
void handleDiscovery(AsyncWebServerRequest *request);
void handleGetRooms(AsyncWebServerRequest *request);
void handleGetShades(AsyncWebServerRequest *request);