#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: "); }else{ Serial.printf("[WebSocket] Dropped: "); } Serial.println(buffer); } 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: if (payload) { Serial.print("[WebSocket] Disconnected - Reason: "); Serial.println((char*)payload); } else { Serial.println("[WebSocket] Disconnected - No reason provided"); } break; case WStype_CONNECTED: Serial.println("[WebSocket] Connected"); // If your WebSocket server sends a greeting or any message upon connection, you can log it here if (payload && length > 0) { Serial.print("[WebSocket] Server response: "); Serial.println((char*)payload); } break; case WStype_TEXT: Serial.print("[WebSocket] Received text: "); Serial.println((char*)payload); break; case WStype_BIN: Serial.print("[WebSocket] Received binary data, length: "); Serial.println(length); // Optionally, you can add a function to dump binary data for deeper inspection break; case WStype_ERROR: Serial.print("[WebSocket] Error: "); if (payload) { Serial.println((char*)payload); } else { Serial.println("No specific error message provided."); } break; case WStype_PING: Serial.println("[WebSocket] Ping received"); break; case WStype_PONG: Serial.println("[WebSocket] Pong received"); 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