Skip to content

Commit e357233

Browse files
committed
Use AsyncJsonResponse in JsonResponse struct
1 parent 00653ff commit e357233

2 files changed

Lines changed: 47 additions & 43 deletions

File tree

src/jsonresponse.h

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,28 @@
88

99
namespace APB {
1010
struct JsonResponse {
11-
JsonResponse(AsyncWebServerRequest *request, int statusCode=200)
12-
: document{}, request{request}, statusCode{statusCode} {
11+
JsonResponse(AsyncWebServerRequest *request, int statusCode=200, bool isArray = false)
12+
: request{request}, statusCode{statusCode} {
13+
response = new AsyncJsonResponse(isArray);
14+
}
15+
16+
JsonVariant &root() {
17+
return response->getRoot();
1318
}
1419

1520
~JsonResponse() {
16-
AsyncResponseStream *response = request->beginResponseStream(JSON_CONTENT_TYPE);
17-
serializeJson(document, *response);
1821
response->setCode(statusCode);
22+
response->setLength();
1923
request->send(response);
2024
}
2125

22-
ArduinoJson::JsonDocument document;
2326
AsyncWebServerRequest *request;
27+
AsyncJsonResponse *response;
2428
int statusCode;
2529

2630
static JsonResponse error(int statusCode, const String &errorMessage, AsyncWebServerRequest *request) {
2731
JsonResponse response(request, statusCode);
28-
response.document["error"] = errorMessage;
32+
response.root()["error"] = errorMessage;
2933
return response;
3034
}
3135
};

src/webserver.cpp

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ void APB::WebServer::setup() {
5050
server.on("/api/wifi", HTTP_DELETE, [this](AsyncWebServerRequest *request){
5151
new Task(1'000, TASK_ONCE, [](){WiFi.disconnect();}, &scheduler, true);
5252
JsonResponse response(request);
53-
response.document["status"] = "Dropping WiFi";
53+
response.root()["status"] = "Dropping WiFi";
5454
});
5555
#endif
5656
server.on("/api/wifi", HTTP_GET, std::bind(&APB::WebServer::onGetWiFiStatus, this, _1));
@@ -87,30 +87,30 @@ void APB::WebServer::setup() {
8787

8888
void APB::WebServer::onRestart(AsyncWebServerRequest *request) {
8989
JsonResponse response(request);
90-
response.document["status"] = "restarting";
90+
response.root()["status"] = "restarting";
9191
new Task(1000, TASK_ONCE, [](){ esp_restart(); }, &scheduler, true);
9292
}
9393

9494
void APB::WebServer::onGetStatus(AsyncWebServerRequest *request) {
9595
JsonResponse response(request);
96-
response.document["status"] = "ok";
97-
response.document["uptime"] = esp_timer_get_time() / 1000'000.0;
96+
response.root()["status"] = "ok";
97+
response.root()["uptime"] = esp_timer_get_time() / 1000'000.0;
9898

99-
response.document["has_power_monitor"] = PowerMonitor::Instance.status().initialised;
100-
response.document["has_ambient_sensor"] = Ambient::Instance.isInitialised();
101-
response.document["has_serial"] = static_cast<bool>(Serial);
99+
response.root()["has_power_monitor"] = PowerMonitor::Instance.status().initialised;
100+
response.root()["has_ambient_sensor"] = Ambient::Instance.isInitialised();
101+
response.root()["has_serial"] = static_cast<bool>(Serial);
102102
}
103103

104104
void APB::WebServer::onGetConfig(AsyncWebServerRequest *request) {
105105
JsonResponse response(request);
106-
response.document["accessPoint"]["essid"] = Settings::Instance.apConfiguration().essid;
107-
response.document["accessPoint"]["psk"] = Settings::Instance.apConfiguration().psk;
106+
response.root()["accessPoint"]["essid"] = Settings::Instance.apConfiguration().essid;
107+
response.root()["accessPoint"]["psk"] = Settings::Instance.apConfiguration().psk;
108108
for(uint8_t i=0; i<APB_MAX_STATIONS; i++) {
109109
auto station = Settings::Instance.station(i);
110-
response.document["stations"][i]["essid"] = station.essid;
111-
response.document["stations"][i]["psk"] = station.psk;
110+
response.root()["stations"][i]["essid"] = station.essid;
111+
response.root()["stations"][i]["psk"] = station.psk;
112112
}
113-
response.document["ledDuty"] = Settings::Instance.statusLedDuty();
113+
response.root()["ledDuty"] = Settings::Instance.statusLedDuty();
114114
}
115115

116116
void APB::WebServer::onGetHistory(AsyncWebServerRequest *request) {
@@ -125,8 +125,8 @@ void APB::WebServer::onGetHistory(AsyncWebServerRequest *request) {
125125

126126
void APB::WebServer::onNotFound(AsyncWebServerRequest *request) {
127127
JsonResponse response(request, 404);
128-
response.document["error"] = "NotFound";
129-
response.document["url"] = request->url();
128+
response.root()["error"] = "NotFound";
129+
response.root()["url"] = request->url();
130130
}
131131

132132
void APB::WebServer::onConfigAccessPoint(AsyncWebServerRequest *request, JsonVariant &json) {
@@ -177,10 +177,10 @@ void APB::WebServer::onPostWriteConfig(AsyncWebServerRequest *request) {
177177

178178
void APB::WebServer::onGetWiFiStatus(AsyncWebServerRequest *request) {
179179
JsonResponse response(request);
180-
response.document["wifi"]["status"] = WiFiManager::Instance.statusAsString();
181-
response.document["wifi"]["essid"] = WiFiManager::Instance.essid();
182-
response.document["wifi"]["ip"] = WiFiManager::Instance.ipAddress();
183-
response.document["wifi"]["gateway"] = WiFiManager::Instance.gateway();
180+
response.root()["wifi"]["status"] = WiFiManager::Instance.statusAsString();
181+
response.root()["wifi"]["essid"] = WiFiManager::Instance.essid();
182+
response.root()["wifi"]["ip"] = WiFiManager::Instance.ipAddress();
183+
response.root()["wifi"]["gateway"] = WiFiManager::Instance.gateway();
184184
}
185185

186186
void APB::WebServer::onPostReconnectWiFi(AsyncWebServerRequest *request) {
@@ -194,14 +194,14 @@ void APB::WebServer::onGetAmbient(AsyncWebServerRequest *request) {
194194
return;
195195
}
196196
JsonResponse response(request);
197-
populateAmbientStatus(response.document.to<JsonObject>());
197+
populateAmbientStatus(response.root().to<JsonObject>());
198198
}
199199

200200

201201

202202
void APB::WebServer::onGetHeaters(AsyncWebServerRequest *request) {
203203
JsonResponse response(request);
204-
populateHeatersStatus(response.document.to<JsonArray>());
204+
populateHeatersStatus(response.root().to<JsonArray>());
205205
}
206206

207207
void APB::WebServer::populateHeatersStatus(JsonArray heatersStatus) {
@@ -238,7 +238,7 @@ void APB::WebServer::onGetPower(AsyncWebServerRequest *request) {
238238
return;
239239
}
240240
JsonResponse response(request);
241-
populatePowerStatus(response.document.to<JsonObject>());
241+
populatePowerStatus(response.root().to<JsonObject>());
242242
}
243243

244244
void APB::WebServer::onGetMetrics(AsyncWebServerRequest *request) {
@@ -309,21 +309,21 @@ void APB::WebServer::onGetMetrics(AsyncWebServerRequest *request) {
309309

310310
void APB::WebServer::onGetESPInfo(AsyncWebServerRequest *request) {
311311
JsonResponse response(request);
312-
response.document["mem"]["freeHeap"] = ESP.getFreeHeap();
313-
response.document["mem"]["freePsRam"] = ESP.getFreePsram();
314-
response.document["mem"]["heapSize"] = ESP.getHeapSize();
315-
response.document["mem"]["psRamSize"] = ESP.getPsramSize();
316-
response.document["mem"]["usedHeap"] = ESP.getHeapSize() - ESP.getFreeHeap();
317-
response.document["mem"]["usedPsRam"] = ESP.getPsramSize() - ESP.getFreePsram();
318-
response.document["mem"]["maxAllocHeap"] = ESP.getMaxAllocHeap();
319-
response.document["mem"]["maxAllocPsRam"] = ESP.getMaxAllocPsram();
320-
response.document["sketch"]["MD5"] = ESP.getSketchMD5();
321-
response.document["sketch"]["size"] = ESP.getSketchSize();
322-
response.document["sketch"]["totalSpace"] = ESP.getFreeSketchSpace();
323-
response.document["sketch"]["sdkVersion"] = ESP.getSdkVersion();
324-
response.document["esp"]["chipModel"] = ESP.getChipModel();
325-
response.document["esp"]["chipCores"] = ESP.getChipCores();
326-
response.document["esp"]["cpuFreqMHz"] = ESP.getCpuFreqMHz();
312+
response.root()["mem"]["freeHeap"] = ESP.getFreeHeap();
313+
response.root()["mem"]["freePsRam"] = ESP.getFreePsram();
314+
response.root()["mem"]["heapSize"] = ESP.getHeapSize();
315+
response.root()["mem"]["psRamSize"] = ESP.getPsramSize();
316+
response.root()["mem"]["usedHeap"] = ESP.getHeapSize() - ESP.getFreeHeap();
317+
response.root()["mem"]["usedPsRam"] = ESP.getPsramSize() - ESP.getFreePsram();
318+
response.root()["mem"]["maxAllocHeap"] = ESP.getMaxAllocHeap();
319+
response.root()["mem"]["maxAllocPsRam"] = ESP.getMaxAllocPsram();
320+
response.root()["sketch"]["MD5"] = ESP.getSketchMD5();
321+
response.root()["sketch"]["size"] = ESP.getSketchSize();
322+
response.root()["sketch"]["totalSpace"] = ESP.getFreeSketchSpace();
323+
response.root()["sketch"]["sdkVersion"] = ESP.getSdkVersion();
324+
response.root()["esp"]["chipModel"] = ESP.getChipModel();
325+
response.root()["esp"]["chipCores"] = ESP.getChipCores();
326+
response.root()["esp"]["cpuFreqMHz"] = ESP.getCpuFreqMHz();
327327
}
328328

329329
void APB::WebServer::onPostSetHeater(AsyncWebServerRequest *request, JsonVariant &json) {
@@ -374,7 +374,7 @@ void APB::WebServer::onConfigStatusLedDuty(AsyncWebServerRequest *request, JsonV
374374
.invalid()) return;
375375
StatusLed::Instance.setDuty(json["duty"]);
376376
JsonResponse response(request);
377-
response.document["duty"] = StatusLed::Instance.duty();
377+
response.root()["duty"] = StatusLed::Instance.duty();
378378
}
379379

380380
void APB::WebServer::onJsonRequest(const char *path, ArJsonRequestHandlerFunction f, WebRequestMethodComposite method) {

0 commit comments

Comments
 (0)