mirror of
https://github.com/MrUnknownDE/OpenIris-ESPIDF.git
synced 2026-04-15 04:23:46 +02:00
71 lines
1.7 KiB
C++
71 lines
1.7 KiB
C++
#include "WebSocketLogger.hpp"
|
|
|
|
WebSocketLogger::WebSocketLogger()
|
|
{
|
|
this->connected_socket_client = async_resp_arg{
|
|
.hd = nullptr,
|
|
.fd = -1,
|
|
};
|
|
|
|
this->ws_log_buffer[0] = '\0';
|
|
}
|
|
|
|
void LoggerHelpers::ws_async_send(void *arg)
|
|
{
|
|
char *log_buffer = webSocketLogger.get_websocket_log_buffer();
|
|
|
|
const auto *resp_arg = static_cast<struct async_resp_arg *>(arg);
|
|
const auto hd = resp_arg->hd;
|
|
const auto fd = resp_arg->fd;
|
|
|
|
auto websocket_packet = httpd_ws_frame_t{};
|
|
|
|
websocket_packet.payload = reinterpret_cast<uint8_t *>(log_buffer);
|
|
websocket_packet.len = strlen(log_buffer);
|
|
websocket_packet.type = HTTPD_WS_TYPE_TEXT;
|
|
|
|
httpd_ws_send_frame_async(hd, fd, &websocket_packet);
|
|
}
|
|
|
|
esp_err_t WebSocketLogger::log_message(const char *format, va_list args)
|
|
{
|
|
vsnprintf(this->ws_log_buffer, 100, format, args);
|
|
|
|
if (connected_socket_client.fd == -1 || connected_socket_client.hd == nullptr)
|
|
{
|
|
return ESP_FAIL;
|
|
}
|
|
|
|
esp_err_t ret = httpd_queue_work(connected_socket_client.hd, LoggerHelpers::ws_async_send, &connected_socket_client);
|
|
if (ret != ESP_OK)
|
|
{
|
|
connected_socket_client.fd = -1;
|
|
connected_socket_client.hd = nullptr;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
esp_err_t WebSocketLogger::register_socket_client(httpd_req_t *req)
|
|
{
|
|
if (connected_socket_client.fd != -1 && connected_socket_client.hd != nullptr)
|
|
{
|
|
// we're already connected
|
|
return ESP_OK;
|
|
}
|
|
|
|
connected_socket_client.hd = req->handle;
|
|
connected_socket_client.fd = httpd_req_to_sockfd(req);
|
|
return ESP_OK;
|
|
}
|
|
|
|
void WebSocketLogger::unregister_socket_client()
|
|
{
|
|
connected_socket_client.fd = -1;
|
|
connected_socket_client.hd = nullptr;
|
|
}
|
|
|
|
char *WebSocketLogger::get_websocket_log_buffer()
|
|
{
|
|
return this->ws_log_buffer;
|
|
} |