#ifndef PsychicWebSocket_h #define PsychicWebSocket_h #include "PsychicCore.h" #include "PsychicRequest.h" class PsychicWebSocketRequest; class PsychicWebSocketClient; //callback function definitions typedef std::function PsychicWebSocketClientCallback; typedef std::function PsychicWebSocketFrameCallback; class PsychicWebSocketClient : public PsychicClient { public: PsychicWebSocketClient(PsychicClient *client); ~PsychicWebSocketClient(); esp_err_t sendMessage(httpd_ws_frame_t * ws_pkt); esp_err_t sendMessage(httpd_ws_type_t op, const void *data, size_t len); esp_err_t sendMessage(const char *buf); }; class PsychicWebSocketRequest : public PsychicRequest { private: PsychicWebSocketClient _client; public: PsychicWebSocketRequest(PsychicRequest *req); virtual ~PsychicWebSocketRequest(); PsychicWebSocketClient * client() override; esp_err_t reply(httpd_ws_frame_t * ws_pkt); esp_err_t reply(httpd_ws_type_t op, const void *data, size_t len); esp_err_t reply(const char *buf); }; class PsychicWebSocketHandler : public PsychicHandler { protected: PsychicWebSocketClientCallback _onOpen; PsychicWebSocketFrameCallback _onFrame; PsychicWebSocketClientCallback _onClose; public: PsychicWebSocketHandler(); ~PsychicWebSocketHandler(); PsychicWebSocketClient * getClient(int socket) override; PsychicWebSocketClient * getClient(PsychicClient *client) override; void addClient(PsychicClient *client) override; void removeClient(PsychicClient *client) override; void openCallback(PsychicClient *client) override; void closeCallback(PsychicClient *client) override; bool isWebSocket() override final; esp_err_t handleRequest(PsychicRequest *request) override; PsychicWebSocketHandler *onOpen(PsychicWebSocketClientCallback fn); PsychicWebSocketHandler *onFrame(PsychicWebSocketFrameCallback fn); PsychicWebSocketHandler *onClose(PsychicWebSocketClientCallback fn); void sendAll(httpd_ws_frame_t * ws_pkt); void sendAll(httpd_ws_type_t op, const void *data, size_t len); void sendAll(const char *buf); }; #endif // PsychicWebSocket_h