#ifndef WEBSOCKETMANAGER_H #define WEBSOCKETMANAGER_H #include #include #include "ca_cert.h" // Include the CA certificate 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()) { 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); Serial.print("[WebSocket] Sent: "); } } private: static void webSocketTask(void *param) { WiFiClientSecure client; client.setCACert(ca_cert); webSocket.beginSSL(serverUrl.c_str(), serverPort, serverPath.c_str(), ca_cert); webSocket.onEvent(webSocketEvent); webSocket.setReconnectInterval(5000); 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: Serial.println("[WebSocket] Disconnected"); break; case WStype_CONNECTED: 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; }; // Define static members WebSocketsClient WebSocketManager::webSocket; String WebSocketManager::serverUrl = ""; uint16_t WebSocketManager::serverPort = 0; String WebSocketManager::serverPath = ""; #endif // WEBSOCKETMANAGER_H