84 lines
2.4 KiB
C++
84 lines
2.4 KiB
C++
#include "http.h"
|
|
|
|
#include <ArduinoJson.h>
|
|
|
|
#include "audio.h"
|
|
#include "ESPAsyncWebServer.h"
|
|
#include "player.h"
|
|
|
|
AsyncWebServer server(80);
|
|
|
|
AsyncWebSocket ws("/ws");
|
|
|
|
void onWebSocketEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, const AwsEventType type, void *arg, const uint8_t *data, const size_t len) {
|
|
if (type == WS_EVT_CONNECT) {
|
|
Serial.printf("[WEBSOCKET] Connected: %s\n", client->remoteIP().toString().c_str());
|
|
client->text(stateBuffer);
|
|
} else if (type == WS_EVT_DISCONNECT) {
|
|
Serial.printf("[WEBSOCKET] Disconnected: %s\n", client->remoteIP().toString().c_str());
|
|
}
|
|
}
|
|
|
|
void httpSetup() {
|
|
Serial.println("Starting HTTP server");
|
|
DefaultHeaders::Instance().addHeader("Access-Control-Allow-Origin", "*");
|
|
server.onNotFound([](AsyncWebServerRequest *request) {
|
|
const auto path = request->url();
|
|
if (path.endsWith("/") && path.length() > 1) {
|
|
request->redirect(path.substring(0, path.length() - 1));
|
|
} else {
|
|
request->send(404, "text/plain", "Not Found");
|
|
}
|
|
});
|
|
server.on("/state", [](AsyncWebServerRequest *request) {
|
|
request->send(200, "application/json", stateBuffer);
|
|
});
|
|
server.on("/stop", [](AsyncWebServerRequest *request) {
|
|
playerState = PLAYER_STOP;
|
|
request->send(200);
|
|
});
|
|
server.on("/play", [](AsyncWebServerRequest *request) {
|
|
playerState = PLAYER_PLAY;
|
|
request->send(200);
|
|
});
|
|
server.on("/pause", [](AsyncWebServerRequest *request) {
|
|
playerState = PLAYER_PAUSE;
|
|
request->send(200);
|
|
});
|
|
server.on("/mute", [](AsyncWebServerRequest *request) {
|
|
audioMute = true;
|
|
request->send(200);
|
|
});
|
|
server.on("/unmute", [](AsyncWebServerRequest *request) {
|
|
audioMute = false;
|
|
request->send(200);
|
|
});
|
|
server.on("/up", [](AsyncWebServerRequest *request) {
|
|
audioVolume = max(0.0f, min(audioVolume + 0.05f, 1.0f));
|
|
request->send(200);
|
|
});
|
|
server.on("/down", [](AsyncWebServerRequest *request) {
|
|
audioVolume = max(0.0f, min(audioVolume - 0.05f, 1.0f));
|
|
request->send(200);
|
|
});
|
|
server.on("/next", [](AsyncWebServerRequest *request) {
|
|
playerSkip += 1;
|
|
request->send(200);
|
|
});
|
|
server.on("/back", [](AsyncWebServerRequest *request) {
|
|
playerSkip -= 1;
|
|
request->send(200);
|
|
});
|
|
ws.onEvent(onWebSocketEvent);
|
|
server.addHandler(&ws);
|
|
server.begin();
|
|
}
|
|
|
|
void httpLoop() {
|
|
ws.cleanupClients();
|
|
}
|
|
|
|
void websocketSendAll() {
|
|
ws.textAll(stateBuffer);
|
|
}
|