PatrixNode/src/patrix/core/http.cpp

59 lines
1.3 KiB
C++

#include <ESPAsyncWebServer.h>
#include <patrix/core/log.h>
#include <patrix/core/system.h>
#include <patrix/node/Node.h>
AsyncWebServer server(80);
AsyncWebSocket ws("/ws");
void httpReboot(AsyncWebServerRequest *request) {
info("Rebooting...");
request->redirect("/");
request->client()->close();
yield();
delay(500);
restart();
}
void httpSetup() {
ws.onEvent([](AsyncWebSocket *socket, AsyncWebSocketClient *client, AwsEventType type, void *arg, unsigned char *message, unsigned length) {
const char *t;
switch (type) {
case WS_EVT_CONNECT:
t = "CONNECT";
patrixNode.websocketEvent(socket, client, type, arg, message, length);
break;
case WS_EVT_DISCONNECT:
t = "DISCONNECT";
break;
case WS_EVT_PONG:
t = "PONG";
break;
case WS_EVT_ERROR:
t = "ERROR";
break;
case WS_EVT_DATA:
t = "DATA";
break;
default:
t = "[???]";
break;
}
debug("%s: %s (%d bytes)", client->remoteIP().toString().c_str(), t, length);
});
server.addHandler(&ws);
server.on("/reboot", HTTP_GET, httpReboot);
server.begin();
}
void httpLoop() {
ws.cleanupClients();
}
void websocketSendAll(const String& payload) {
ws.textAll(payload);
}