Skip to content

Commit 211938e

Browse files
committed
Extract webserver base class into AsyncWebServerUtils
1 parent f48af1e commit 211938e

3 files changed

Lines changed: 33 additions & 39 deletions

File tree

platformio.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ lib_deps =
1919
https://github.com/mathieucarbou/AsyncTCP.git#v3.2.4
2020
https://github.com/mathieucarbou/ESPAsyncWebServer.git#v3.1.5
2121
https://github.com/GuLinux/AsyncBufferedTcpLogger#v0.0.2
22-
https://github.com/GuLinux/AsyncWebserverUtils#v0.0.3
22+
https://github.com/GuLinux/AsyncWebserverUtils#v0.0.4
2323
https://github.com/GuLinux/WiFiManager.git#v0.0.1
2424
https://github.com/GuLinux/ArduinoOTA-Manager.git#v0.0.1
2525
ayushsharma82/ElegantOTA @ 3.1.1

src/webserver.cpp

Lines changed: 29 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -14,62 +14,61 @@
1414

1515
#define LOG_SCOPE "APB::WebServer "
1616

17+
#ifdef ALLOW_ALL_CORS
18+
#define ALLOW_CORS_VALUE true
19+
#else
20+
#define ALLOW_CORS_VALUE false
21+
#endif
22+
1723
using namespace std::placeholders;
1824
using namespace GuLinux;
1925

20-
APB::WebServer::WebServer(Scheduler &scheduler) : server(80),
26+
APB::WebServer::WebServer(Scheduler &scheduler) : AsyncWebServerBase{},
2127
events("/api/events"),
2228
scheduler(scheduler)
2329
{
2430
}
2531

2632

33+
2734
void APB::WebServer::setup() {
2835
Log.traceln(LOG_SCOPE "Setup");
29-
ElegantOTA.begin(&server);
30-
#ifdef ALLOW_ALL_CORS
31-
#warning "Adding Access-Control-Allow-Origin:* header to all requests (CORS)"
32-
DefaultHeaders::Instance().addHeader("Access-Control-Allow-Origin", "*");
33-
#endif
34-
ElegantOTA.onStart([this](){ Log.infoln(LOG_SCOPE "OTA Started"); });
35-
ElegantOTA.onProgress([this](size_t current, size_t total){
36-
Log.infoln(LOG_SCOPE "OTA progress: %d%%(%d/%d)", int(current * 100.0 /total), current, total);
37-
});
38-
ElegantOTA.onEnd([this](bool success){ Log.infoln(LOG_SCOPE "OTA Finished, success=%d", success); });
39-
Log.traceln(LOG_SCOPE "ElegantOTA setup");
36+
37+
setupBase(true, ALLOW_CORS_VALUE);
38+
4039

4140
onJsonRequest("/api/config/accessPoint", std::bind(&WiFiManager::onConfigAccessPoint, &WiFiManager::Instance, _1, _2), HTTP_POST | HTTP_DELETE);
4241
onJsonRequest("/api/config/station", std::bind(&WiFiManager::onConfigStation, &WiFiManager::Instance, _1, _2), HTTP_POST | HTTP_DELETE);
4342
onJsonRequest("/api/config/statusLedDuty", std::bind(&WebServer::onConfigStatusLedDuty, this, _1, _2), HTTP_POST);
4443
onJsonRequest("/api/config/powerSourceType", std::bind(&WebServer::onConfigPowerSourceType, this, _1, _2), HTTP_POST);
45-
server.on("/api/metrics", HTTP_GET, std::bind(&WebServer::onGetMetrics, this, _1));
46-
server.on("/api/config/write", HTTP_POST, std::bind(&WebServer::onPostWriteConfig, this, _1));
47-
server.on("/api/config", HTTP_GET, std::bind(&WebServer::onGetConfig, this, _1));
48-
server.on("/api/info", HTTP_GET, std::bind(&WebServer::onGetESPInfo, this, _1));
49-
server.on("/api/history", HTTP_GET, std::bind(&WebServer::onGetHistory, this, _1));
50-
server.on("/api/power", HTTP_GET, std::bind(&WebServer::onGetPower, this, _1));
51-
server.on("/api/wifi/connect", HTTP_POST, std::bind(&WiFiManager::onPostReconnectWiFi, &WiFiManager::Instance, _1));
44+
webserver.on("/api/metrics", HTTP_GET, std::bind(&WebServer::onGetMetrics, this, _1));
45+
webserver.on("/api/config/write", HTTP_POST, std::bind(&WebServer::onPostWriteConfig, this, _1));
46+
webserver.on("/api/config", HTTP_GET, std::bind(&WebServer::onGetConfig, this, _1));
47+
webserver.on("/api/info", HTTP_GET, std::bind(&WebServer::onGetESPInfo, this, _1));
48+
webserver.on("/api/history", HTTP_GET, std::bind(&WebServer::onGetHistory, this, _1));
49+
webserver.on("/api/power", HTTP_GET, std::bind(&WebServer::onGetPower, this, _1));
50+
webserver.on("/api/wifi/connect", HTTP_POST, std::bind(&WiFiManager::onPostReconnectWiFi, &WiFiManager::Instance, _1));
5251
#ifdef CONFIGURATION_FOR_PROTOTYPE
5352
server.on("/api/wifi", HTTP_DELETE, [this](AsyncWebServerRequest *request){
5453
new Task(1'000, TASK_ONCE, [](){WiFi.disconnect();}, &scheduler, true);
5554
JsonResponse response(request);
5655
response.root()["status"] = "Dropping WiFi";
5756
});
5857
#endif
59-
server.on("/api/wifi", HTTP_GET, std::bind(&WiFiManager::onGetWiFiStatus, &WiFiManager::Instance, _1));
60-
server.on("/api/restart", HTTP_POST, std::bind(&WebServer::onRestart, this, _1));
58+
webserver.on("/api/wifi", HTTP_GET, std::bind(&WiFiManager::onGetWiFiStatus, &WiFiManager::Instance, _1));
59+
webserver.on("/api/restart", HTTP_POST, std::bind(&WebServer::onRestart, this, _1));
6160

62-
server.on("/api/status", HTTP_GET, std::bind(&WebServer::onGetStatus, this, _1));
63-
server.on("/api/ambient", HTTP_GET, std::bind(&WebServer::onGetAmbient, this, _1));
64-
server.on("/api/heaters", HTTP_GET, std::bind(&WebServer::onGetHeaters, this, _1));
65-
server.serveStatic("/", LittleFS, "/web/").setDefaultFile("index.html");
66-
server.serveStatic("/static", LittleFS, "/web/static").setDefaultFile("index.html");
67-
server.addHandler(&events);
68-
server.onNotFound(std::bind(&APB::WebServer::onNotFound, this, _1));
61+
webserver.on("/api/status", HTTP_GET, std::bind(&WebServer::onGetStatus, this, _1));
62+
webserver.on("/api/ambient", HTTP_GET, std::bind(&WebServer::onGetAmbient, this, _1));
63+
webserver.on("/api/heaters", HTTP_GET, std::bind(&WebServer::onGetHeaters, this, _1));
64+
webserver.serveStatic("/", LittleFS, "/web/").setDefaultFile("index.html");
65+
webserver.serveStatic("/static", LittleFS, "/web/static").setDefaultFile("index.html");
66+
webserver.addHandler(&events);
67+
webserver.onNotFound(std::bind(&APB::WebServer::onNotFound, this, _1));
6968
onJsonRequest("/api/heater", std::bind(&APB::WebServer::onPostSetHeater, this, _1, _2), HTTP_POST);
7069

7170
Log.infoln(LOG_SCOPE "Setup finished");
72-
server.begin();
71+
webserver.begin();
7372

7473
new Task(1000, TASK_FOREVER, [this](){
7574
eventsDocument.clear();
@@ -370,8 +369,4 @@ void APB::WebServer::onConfigPowerSourceType(AsyncWebServerRequest *request, Jso
370369
response.root()["powerSourceType"] = Settings::PowerSourcesNames.at(Settings::Instance.powerSource());
371370
}
372371

373-
void APB::WebServer::onJsonRequest(const char *path, ArJsonRequestHandlerFunction f, WebRequestMethodComposite method) {
374-
auto handler = new AsyncCallbackJsonWebHandler(path, f);
375-
handler->setMethod(method);
376-
server.addHandler(handler);
377-
}
372+

src/webserver.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
#include <ESPAsyncWebServer.h>
55
#include <ArduinoJson.h>
6-
#include <AsyncJson.h>
76

87
#include "settings.h"
98
#include <wifimanager.h>
@@ -14,14 +13,15 @@
1413
#include "statusled.h"
1514
#include "history.h"
1615

16+
#include <AsyncWebServerBase.h>
17+
1718
namespace APB {
1819

19-
class WebServer {
20+
class WebServer : public AsyncWebServerBase {
2021
public:
2122
WebServer(Scheduler &scheduler);
2223
void setup();
2324
private:
24-
AsyncWebServer server;
2525
AsyncEventSource events;
2626
Scheduler &scheduler;
2727
JsonDocument eventsDocument;
@@ -47,7 +47,6 @@ class WebServer {
4747
void populateAmbientStatus(JsonObject ambientStatus);
4848
void populatePowerStatus(JsonObject powerStatus);
4949

50-
void onJsonRequest(const char *path, ArJsonRequestHandlerFunction f, WebRequestMethodComposite = HTTP_POST | HTTP_PUT | HTTP_PATCH);
5150
};
5251
}
5352

0 commit comments

Comments
 (0)