Füge Unterstützung für WebSocket-Nutzer in ChatUser und ChatRoom hinzu
- Implementiere einen neuen Konstruktor in der Klasse `ChatUser`, der einen WebSocket-Pointer akzeptiert, um die Benutzerkommunikation über WebSockets zu ermöglichen. - Aktualisiere die Methode `addUser` in `ChatRoom`, um den neuen Konstruktor zu verwenden und sicherzustellen, dass Benutzer korrekt hinzugefügt werden. - Ergänze die Logik in der `send`-Methode von `ChatUser`, um Nachrichten über WebSockets zu senden, wenn ein gültiger WebSocket-Pointer vorhanden ist. - Füge Debug-Ausgaben hinzu, um den Ablauf beim Hinzufügen von Benutzern und beim Senden von Nachrichten über WebSockets zu protokollieren.
This commit is contained in:
@@ -14,6 +14,17 @@
|
||||
#include <openssl/buffer.h>
|
||||
#include <set>
|
||||
#include <mutex>
|
||||
#include <libwebsockets.h>
|
||||
|
||||
// Forward declaration for WebSocket user data
|
||||
struct WebSocketUserData {
|
||||
std::string pendingMessage;
|
||||
std::string token;
|
||||
std::string userName;
|
||||
std::string userColor;
|
||||
std::string currentRoom;
|
||||
bool authenticated;
|
||||
};
|
||||
|
||||
namespace Yc {
|
||||
namespace Lib {
|
||||
@@ -327,5 +338,42 @@ namespace Yc {
|
||||
return token;
|
||||
}
|
||||
|
||||
void Base::sendWebSocketMessage(void* wsi, const std::string& out) {
|
||||
#ifdef YC_DEBUG
|
||||
std::cout << "[Debug] Base::sendWebSocketMessage(void*) called with wsi: " << wsi << ", length: " << out.length() << std::endl;
|
||||
#endif
|
||||
|
||||
if (!wsi) {
|
||||
#ifdef YC_DEBUG
|
||||
std::cout << "[Debug] Invalid WebSocket wsi (nullptr), skipping send" << std::endl;
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
// Cast to lws* and use libwebsockets API
|
||||
struct lws* lws_wsi = static_cast<struct lws*>(wsi);
|
||||
|
||||
// Store message in user data for sending
|
||||
auto* ud = reinterpret_cast<WebSocketUserData*>(lws_wsi_user(lws_wsi));
|
||||
if (ud) {
|
||||
ud->pendingMessage = out;
|
||||
lws_callback_on_writable(lws_wsi);
|
||||
} else {
|
||||
#ifdef YC_DEBUG
|
||||
std::cout << "[Debug] No user data found for WebSocket, cannot send message" << std::endl;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void Base::sendWebSocketMessage(void* wsi, const Json::Value& out) {
|
||||
#ifdef YC_DEBUG
|
||||
std::cout << "[Debug] Base::sendWebSocketMessage(void*, Json::Value) called with wsi: " << wsi << std::endl;
|
||||
#endif
|
||||
|
||||
// Convert JSON to string and call the string version
|
||||
std::string outString = getJsonString(out);
|
||||
sendWebSocketMessage(wsi, outString);
|
||||
}
|
||||
|
||||
} // namespace Lib
|
||||
} // namespace Yc
|
||||
|
||||
Reference in New Issue
Block a user