Verbessere Benutzerkommunikation im ChatRoom durch optimierte Nachrichtenreihenfolge

- Füge Debug-Ausgaben hinzu, um den Ablauf beim Hinzufügen neuer Benutzer zu protokollieren.
- Sende wichtige Nachrichten (Raum- und Benutzerlisten) an den neuen Benutzer, bevor der checkerTask-Thread gestartet wird, um sicherzustellen, dass alle relevanten Informationen rechtzeitig bereitgestellt werden.
- Implementiere eine kurze Verzögerung, um den Abschluss des WebSocket-Handshakes zu gewährleisten, bevor Nachrichten gesendet werden.
This commit is contained in:
Torsten Schulz (local)
2025-09-05 11:10:03 +02:00
parent 9e5d53c188
commit 8e6640a937
2 changed files with 46 additions and 3 deletions

View File

@@ -122,22 +122,39 @@ namespace Yc
newUser = std::make_shared<ChatUser>(shared_from_this(), _userName, color, socket);
}
_users.push_back(newUser);
newUser->start();
// Sende zuerst alle wichtigen Nachrichten, bevor der checkerTask Thread startet
#ifdef YC_DEBUG
std::cout << "[Debug] addUser: Starting message sequence for user: " << newUser->name() << std::endl;
#endif
if (_parent) {
Json::Value roomList = _parent->jsonRoomList();
#ifdef YC_DEBUG
std::cout << "[Debug] addUser: Sending roomList to user: " << newUser->name() << std::endl;
#endif
newUser->sendMsg(ChatUser::roomList, roomList, "", "");
}
// Kurze Pause, damit der WebSocket-Handshake vollständig abgeschlossen ist
#ifdef YC_DEBUG
std::cout << "[Debug] addUser: Waiting 100ms for WebSocket handshake..." << std::endl;
#endif
std::this_thread::sleep_for(std::chrono::milliseconds(100));
// Sende aktuelle Userliste an den neuen User
Json::Value currentUserList = userList();
#ifdef YC_DEBUG
std::cout << "[Debug] addUser: Sending userListe to user: " << newUser->name() << std::endl;
#endif
newUser->sendMsg(ChatUser::userListe, currentUserList, "", "");
// Sende aktualisierte Userliste an alle anderen User im Raum
for (auto &existingUser : _users) {
if (existingUser != newUser) {
#ifdef YC_DEBUG
std::cout << "[Debug] addUser: Sending userListe to existing user: " << existingUser->name() << std::endl;
#endif
existingUser->sendMsg(ChatUser::userListe, currentUserList, "", "");
}
}
@@ -147,6 +164,13 @@ namespace Yc
std::cout << "[Debug] addUser: Sending 'user_entered_chat' message for user: " << newUser->name() << std::endl;
#endif
addMessage(ChatUser::system, "user_entered_chat", newUser->name(), newUser->color());
// Starte den checkerTask Thread erst nach dem Senden aller wichtigen Nachrichten
#ifdef YC_DEBUG
std::cout << "[Debug] addUser: Starting checkerTask thread for user: " << newUser->name() << std::endl;
#endif
newUser->start();
_initRound();
return true;
}