#ifndef WEBSOCKETMANAGER_H #define WEBSOCKETMANAGER_H #include #include #include #include "ca_cert.h" class WebSocketManager { public: WebSocketManager(const char* server, uint16_t port, const char* url) { serverUrl = server; serverPort = port; serverPath = url; } void begin() { xTaskCreate(&WebSocketManager::webSocketTask, "WebSocketTask", 8192, nullptr, 1, nullptr); } template void sendText(const char* format, Args... args) { if (webSocket.isConnected() && isConnected) { char buffer[512]; // Define a buffer to hold the constructed message snprintf(buffer, sizeof(buffer), format, args...); // Use snprintf to format the string webSocket.sendTXT(buffer); } } static bool isConnected() { return connected; } private: static void webSocketTask(void *param) { WiFiClient client; //client.setCACert(ca_cert); //webSocket.beginSSL(serverUrl.c_str(), serverPort, serverPath.c_str(), ca_cert); webSocket.begin(serverUrl.c_str(), serverPort, serverPath.c_str()); webSocket.onEvent(webSocketEvent); webSocket.setReconnectInterval(1000); for (;;) { webSocket.loop(); vTaskDelay(1 / portTICK_PERIOD_MS); } } static void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) { switch (type) { case WStype_DISCONNECTED: connected = false; Serial.println("[WebSocket] Disconnected"); break; case WStype_CONNECTED: connected = true; Serial.println("[WebSocket] Connected"); break; case WStype_TEXT: Serial.print("[WebSocket] Received: "); Serial.println((char*)payload); break; case WStype_BIN: Serial.println("[WebSocket] Received binary data"); break; } } static WebSocketsClient webSocket; static String serverUrl; static uint16_t serverPort; static String serverPath; static bool connected; }; // Define static members WebSocketsClient WebSocketManager::webSocket; String WebSocketManager::serverUrl = ""; uint16_t WebSocketManager::serverPort = 0; String WebSocketManager::serverPath = ""; bool WebSocketManager::connected = false; #endif // WEBSOCKETMANAGER_H