MiLightHttpServer.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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 handleUpdateGroupAlias(RequestContext& request);
  60. void handleGetGroup(RequestContext& request);
  61. void handleGetGroupAlias(RequestContext& request);
  62. void _handleGetGroup(BulbId bulbId, RequestContext& request);
  63. void handleDeleteGroup(RequestContext& request);
  64. void handleDeleteGroupAlias(RequestContext& request);
  65. void _handleDeleteGroup(BulbId bulbId, RequestContext& request);
  66. void handleRequest(const JsonObject& request);
  67. void handleWsEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length);
  68. File updateFile;
  69. PassthroughAuthProvider<Settings> authProvider;
  70. RichHttpServer<RichHttp::Generics::Configs::EspressifBuiltin> server;
  71. WebSocketsServer wsServer;
  72. size_t numWsClients;
  73. MiLightClient*& milightClient;
  74. Settings& settings;
  75. GroupStateStore*& stateStore;
  76. SettingsSavedHandler settingsSavedHandler;
  77. GroupDeletedHandler groupDeletedHandler;
  78. ESP8266WebServer::THandlerFunction _handleRootPage;
  79. PacketSender*& packetSender;
  80. RadioSwitchboard*& radios;
  81. };
  82. #endif