Verbessere WebSocket-Nachrichtenverarbeitung im SSLServer und Base
- Initialisiere Benutzerdaten im WebSocket-Callback, um sicherzustellen, dass Token und ausstehende Nachrichten korrekt gesetzt sind. - Optimiere die Logik zum Senden von Nachrichten, indem Ping-Nachrichten direkt gesendet werden, um die Verbindung aufrechtzuerhalten. - Füge Debug-Ausgaben hinzu, um den Erfolg des Nachrichtensendens zu protokollieren und die Nachverfolgbarkeit zu verbessern.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user