MiLightHttpServer.h 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include <RichHttpServer.h>
  2. #include <MiLightClient.h>
  3. #include <Settings.h>
  4. #include <WebSocketsServer.h>
  5. #include <GroupStateStore.h>
  6. #include <RadioSwitchboard.h>
  7. #include <PacketSender.h>
  8. #ifndef _MILIGHT_HTTP_SERVER
  9. #define _MILIGHT_HTTP_SERVER
  10. #define MAX_DOWNLOAD_ATTEMPTS 3
  11. typedef std::function<void(void)> SettingsSavedHandler;
  12. typedef std::function<void(const BulbId& id)> GroupDeletedHandler;
  13. using RichHttpConfig = RichHttp::Generics::Configs::EspressifBuiltin;
  14. using RequestContext = RichHttpConfig::RequestContextType;
  15. const char TEXT_PLAIN[] PROGMEM = "text/plain";
  16. const char APPLICATION_JSON[] = "application/json";
  17. class MiLightHttpServer {
  18. public:
  19. MiLightHttpServer(
  20. Settings& settings,
  21. MiLightClient*& milightClient,
  22. GroupStateStore*& stateStore,
  23. PacketSender*& packetSender,
  24. RadioSwitchboard*& radios
  25. )
  26. : authProvider(settings)
  27. , server(80, authProvider)
  28. , wsServer(WebSocketsServer(81))
  29. , numWsClients(0)
  30. , milightClient(milightClient)
  31. , settings(settings)
  32. , stateStore(stateStore)
  33. , packetSender(packetSender)
  34. , radios(radios)
  35. { }
  36. void begin();
  37. void handleClient();
  38. void onSettingsSaved(SettingsSavedHandler handler);
  39. void onGroupDeleted(GroupDeletedHandler handler);
  40. void on(const char* path, HTTPMethod method, ESP8266WebServer::THandlerFunction handler);
  41. void handlePacketSent(uint8_t* packet, const MiLightRemoteConfig& config);
  42. WiFiClient client();
  43. protected:
  44. bool serveFile(const char* file, const char* contentType = "text/html");
  45. void handleServe_P(const char* data, size_t length);
  46. void sendGroupState(BulbId& bulbId, GroupState* state, RichHttp::Response& response);
  47. void serveSettings();
  48. void handleUpdateSettings(RequestContext& request);
  49. void handleUpdateSettingsPost(RequestContext& request);
  50. void handleUpdateFile(const char* filename);
  51. void handleGetRadioConfigs(RequestContext& request);
  52. void handleAbout(RequestContext& request);
  53. void handleSystemPost(RequestContext& request);
  54. void handleFirmwareUpload();
  55. void handleFirmwarePost();
  56. void handleListenGateway(RequestContext& request);
  57. void handleSendRaw(RequestContext& request);
  58. void handleUpdateGroup(RequestContext& request);
  59. void handleDeleteGroup(RequestContext& request);
  60. void handleGetGroup(RequestContext& request);
  61. void handleRequest(const JsonObject& request);
  62. void handleWsEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length);
  63. File updateFile;
  64. PassthroughAuthProvider<Settings> authProvider;
  65. RichHttpServer<RichHttp::Generics::Configs::EspressifBuiltin> server;
  66. WebSocketsServer wsServer;
  67. size_t numWsClients;
  68. MiLightClient*& milightClient;
  69. Settings& settings;
  70. GroupStateStore*& stateStore;
  71. SettingsSavedHandler settingsSavedHandler;
  72. GroupDeletedHandler groupDeletedHandler;
  73. ESP8266WebServer::THandlerFunction _handleRootPage;
  74. PacketSender*& packetSender;
  75. RadioSwitchboard*& radios;
  76. };
  77. #endif