diff --git a/src/core/ssl_server.cpp b/src/core/ssl_server.cpp index be6af3c..c5a0258 100644 --- a/src/core/ssl_server.cpp +++ b/src/core/ssl_server.cpp @@ -175,6 +175,11 @@ int SSLServer::wsCallback(struct lws *wsi, enum lws_callback_reasons reason, voi #ifdef YC_DEBUG std::cout << "[Debug] WebSocket connection established, requesting writable callback" << std::endl; #endif + // Initialize user data + if (ud) { + ud->token = ""; + ud->pendingMessage = ""; + } // Request callback when writable to send initial message lws_callback_on_writable(wsi); break; @@ -196,18 +201,10 @@ int SSLServer::wsCallback(struct lws *wsi, enum lws_callback_reasons reason, voi } case LWS_CALLBACK_SERVER_WRITEABLE: { - if (ud->pendingMessage.empty()) { - // Ping senden - unsigned char buf[LWS_PRE + 4]; - memcpy(buf + LWS_PRE, "ping", 4); - lws_write(wsi, buf + LWS_PRE, 4, LWS_WRITE_TEXT); - } else { - // Nachricht senden - unsigned char buf[LWS_PRE + ud->pendingMessage.length()]; - memcpy(buf + LWS_PRE, ud->pendingMessage.c_str(), ud->pendingMessage.length()); - lws_write(wsi, buf + LWS_PRE, ud->pendingMessage.length(), LWS_WRITE_TEXT); - ud->pendingMessage.clear(); - } + // Send ping to keep connection alive + unsigned char buf[LWS_PRE + 4]; + memcpy(buf + LWS_PRE, "ping", 4); + lws_write(wsi, buf + LWS_PRE, 4, LWS_WRITE_TEXT); break; } diff --git a/src/lib/base.cpp b/src/lib/base.cpp index 23580e7..a46bb2a 100755 --- a/src/lib/base.cpp +++ b/src/lib/base.cpp @@ -353,16 +353,18 @@ namespace Yc { // Cast to lws* and use libwebsockets API struct lws* lws_wsi = static_cast(wsi); - // Store message in user data for sending - auto* ud = reinterpret_cast(lws_wsi_user(lws_wsi)); - if (ud) { - ud->pendingMessage = out; - lws_callback_on_writable(lws_wsi); + // Send message directly using lws_write + unsigned char buf[LWS_PRE + out.length()]; + memcpy(buf + LWS_PRE, out.c_str(), out.length()); + int ret = lws_write(lws_wsi, buf + LWS_PRE, out.length(), LWS_WRITE_TEXT); + + #ifdef YC_DEBUG + if (ret < 0) { + std::cout << "[Debug] Failed to write WebSocket message, ret: " << ret << std::endl; } else { - #ifdef YC_DEBUG - std::cout << "[Debug] No user data found for WebSocket, cannot send message" << std::endl; - #endif + std::cout << "[Debug] WebSocket message written successfully, bytes: " << ret << std::endl; } + #endif } void Base::sendWebSocketMessage(void* wsi, const Json::Value& out) {