web_server_base.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #pragma once
  2. #include "esphome/core/component.h"
  3. #include <ESPAsyncWebServer.h>
  4. namespace esphome {
  5. namespace web_server_base {
  6. class WebServerBase : public Component {
  7. public:
  8. void init() {
  9. if (this->initialized_) {
  10. this->initialized_++;
  11. return;
  12. }
  13. this->server_ = new AsyncWebServer(this->port_);
  14. this->server_->begin();
  15. for (auto *handler : this->handlers_)
  16. this->server_->addHandler(handler);
  17. this->initialized_++;
  18. }
  19. void deinit() {
  20. this->initialized_--;
  21. if (this->initialized_ == 0) {
  22. delete this->server_;
  23. this->server_ = nullptr;
  24. }
  25. }
  26. AsyncWebServer *get_server() const { return server_; }
  27. float get_setup_priority() const override;
  28. void add_handler(AsyncWebHandler *handler) {
  29. // remove all handlers
  30. this->handlers_.push_back(handler);
  31. if (this->server_ != nullptr)
  32. this->server_->addHandler(handler);
  33. }
  34. void add_ota_handler();
  35. void set_port(uint16_t port) { port_ = port; }
  36. uint16_t get_port() const { return port_; }
  37. protected:
  38. friend class OTARequestHandler;
  39. int initialized_{0};
  40. uint16_t port_{80};
  41. AsyncWebServer *server_{nullptr};
  42. std::vector<AsyncWebHandler *> handlers_;
  43. };
  44. class OTARequestHandler : public AsyncWebHandler {
  45. public:
  46. OTARequestHandler(WebServerBase *parent) : parent_(parent) {}
  47. void handleRequest(AsyncWebServerRequest *request) override;
  48. void handleUpload(AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len,
  49. bool final) override;
  50. bool canHandle(AsyncWebServerRequest *request) override {
  51. return request->url() == "/update" && request->method() == HTTP_POST;
  52. }
  53. bool isRequestHandlerTrivial() override { return false; }
  54. protected:
  55. uint32_t last_ota_progress_{0};
  56. uint32_t ota_read_length_{0};
  57. WebServerBase *parent_;
  58. };
  59. } // namespace web_server_base
  60. } // namespace esphome