#include "http.h" #include #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); }