ESPBMS/WebSocketManager.h
2024-04-27 21:23:38 +01:00

84 lines
2.5 KiB
C++

#ifndef WEBSOCKETMANAGER_H
#define WEBSOCKETMANAGER_H
#include <WebSocketsClient.h>
#include <WiFiClientSecure.h>
#include <WiFiClient.h>
#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<typename... Args>
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