From 3c824bfc92a5ee706b7f2619e3b9c5ae6367c594 Mon Sep 17 00:00:00 2001 From: Simon Schmidt Date: Sun, 27 Jun 2021 01:56:30 +0200 Subject: [PATCH] much simpler callback approach due to serveStatic with directories !!! --- data/input.js | 2 +- lib/httpserver/httpserver.cpp | 72 +++++++++++++++---------------- lib/httpserver/httpserver.h | 81 +++-------------------------------- 3 files changed, 43 insertions(+), 112 deletions(-) diff --git a/data/input.js b/data/input.js index 69ad112..d7dd8fd 100644 --- a/data/input.js +++ b/data/input.js @@ -28,7 +28,7 @@ xhr.onreadystatechange = function(){ } function reloadTerminal() { - xhr.open("GET", "/terminal", true); + xhr.open("POST", "/app=terminal", true); xhr.send(); setTimeout(reloadTerminal, 1000); }; diff --git a/lib/httpserver/httpserver.cpp b/lib/httpserver/httpserver.cpp index 1eeddd3..ad21a4a 100644 --- a/lib/httpserver/httpserver.cpp +++ b/lib/httpserver/httpserver.cpp @@ -1,42 +1,42 @@ #include "httpserver.h" +bool HTTPServer::start() { + if(!mount_fs()) { + logf("cant mount filesystem, EXIT !\n\r"); + return false; + } + logf("[HTTPServer] LittleFS mounted !\n\r"); + logf("[HTTPServer] root:\n\r"); + this->listRoot(); + logf("\n\r"); -bool HTTPServer::addRootFileHandler() { + // default handler + this->onNotFound([this]() { + String message = "File Not Found\n\n"; + message += "URI: "; + message += uri(); + message += "\nMethod: "; + message += (method() == HTTP_GET) ? "GET" : "POST"; + message += "\nArguments: "; + message += args(); + message += "\n"; - // //experimental, see doku.md - // server.serveStatic("/compressed", LittleFS, "/compressed.html.gzip"); - - this->serveStatic("", LittleFS, "/index.html"); - this->serveStatic("/", LittleFS, "/index.html"); - this->serveStatic("/#", LittleFS, "/index.html"); - this->serveStatic("/style.css", LittleFS, "/style.css"); - this->serveStatic("/input.js", LittleFS, "/input.js"); - this->serveStatic("/favicon.png", LittleFS, "/favicon.png"); - - return true; -} - - -bool HTTPServer::addRootFileHandler_ls() { - logf("addRootFileHandler_ls: %s\n\r", rootDir); - Dir root = LittleFS.openDir(rootDir); - - while (root.next()) { - const String& fName = "/" + root.fileName(); - const String& fName_gz = "/" + root.fileName() + ".gz"; - Serial.printf("Register Callback for: %s @ %s\n\r", - fName.c_str(), fName_gz.c_str()); - - // https://stackoverflow.com/questions/7627098/what-is-a-lambda-expression-in-c11 - on(fName, [this, fName, fName_gz]() { - - logf("addRootFileHandler_ls: %s\n\r", rootDir); - File f = open(fName_gz.c_str()); - if (f) - streamFile(f, mime::getContentType(fName)); - else - send(404, "text/plain", "Failed to open file for reading"); + for (uint8_t i = 0; i < args(); i++) { + message += " " + argName(i) + ": " + arg(i) + "\n"; + } + send(404, "text/plain", message); }); - } - return true; + + // add static root file handler for http + this->serveStatic("/", LittleFS, "/"); + + // application handler + this->on("/app=terminal", HTTP_POST, [this]() { + String log_msg = "terminal: millis: "; + log_msg += millis(); + send(200, "text/plain", log_msg); + }); + + this->begin(); + Serial.printf("[HTTPServer] Server active on Port 80 !\n\r"); } \ No newline at end of file diff --git a/lib/httpserver/httpserver.h b/lib/httpserver/httpserver.h index 443ba29..aead5df 100644 --- a/lib/httpserver/httpserver.h +++ b/lib/httpserver/httpserver.h @@ -1,21 +1,20 @@ #pragma once -#include "filesys.h" #include #include +#include "filesys.h" + +// debug log +// #define DEBUGV(f,...) do { Serial.printf(PSTR(f), ##__VA_ARGS__); } while (0) #define LOG_STR "[HTTPServer]" class HTTPServer : public ESP8266WebServer { + private: const char* rootDir = "/"; - bool addRootFileHandler(); - bool addRootFileHandler_ls(); - bool formatFS() { - return format_fs(); - } void listRoot() { ls(rootDir); } @@ -36,73 +35,5 @@ public: Serial.printf("[HTTPServer] shut down ...\n\r"); } - bool start() { - if(!mount_fs()) - return false; - Serial.printf("[HTTPServer] LittleFS mounted !\n\r"); - - Serial.printf("[HTTPServer] root:\n\r"); - this->listRoot(); - Serial.printf("\n\r"); - - // on("/compress.html", [this]() { - // File f = open("/compress.html.gz"); - // if (!f) { - // Serial.println("Failed to open file for reading"); - // send(404, "text/plain", "Failed to open file for reading"); - // } - // else - // { - // Serial.println("Streaming /compress.html.gz to client"); - // const String cont = "text/html"; - // streamFile(f, cont); - // } - // f.close(); - // }); - // on("/comp.html", [this]() { - // File f = open("/comp.html.gz"); - // if (!f) { - // Serial.println("Failed to open file for reading"); - // send(404, "text/plain", "Failed to open file for reading"); - // } - // else - // { - // Serial.println("Streaming /comp.html.gz to client"); - // const String cont = "text/html"; - // streamFile(f, cont); - // } - // f.close(); - // }); - - on("/terminal", [this]() { - String log_msg = "terminal: millis: "; - log_msg += millis(); - send(200, "text/plain", log_msg); - }); - - // default handler - onNotFound([this]() { - String message = "File Not Found\n\n"; - message += "URI: "; - message += uri(); - message += "\nMethod: "; - message += (method() == HTTP_GET) ? "GET" : "POST"; - message += "\nArguments: "; - message += args(); - message += "\n"; - - for (uint8_t i = 0; i < args(); i++) { - message += " " + argName(i) + ": " + arg(i) + "\n"; - } - send(404, "text/plain", message); - }); - - if( this->addRootFileHandler_ls() ){ - this->begin(); - Serial.printf("[HTTPServer] Server active on Port 80 !\n\r"); - return true; - } - Serial.printf("[HTTPServer] Not starting Server, something went wrong !\n\r"); - return false; - } + bool start(); };