MiLightHttpServer.h 3.5 KB

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