Implementiere Benutzerverbindungskontrolle und verbessere Nachrichtenverwaltung

- Füge die Methode `removeUserDisconnected` in der ChatRoom-Klasse hinzu, um Benutzer bei Verbindungsabbrüchen zu entfernen und entsprechende Nachrichten zu senden.
- Aktualisiere die ChatUser-Klasse, um einen Token-Getter bereitzustellen und die Verbindungsprüfung zu optimieren.
- Ändere die Server-Klasse, um die Benutzerverwaltung bei Raumwechseln zu verbessern und Debug-Informationen hinzuzufügen.
- Optimiere die Socket-Optionen für eine schnellere Fehlererkennung und verbessere die Handhabung von Anfragen.
This commit is contained in:
Torsten Schulz (local)
2025-09-01 15:30:19 +02:00
parent 7338f1a740
commit d92c40748e
12 changed files with 868 additions and 33 deletions

View File

@@ -94,13 +94,7 @@ namespace Yc
newUser->start();
Json::Value roomList = _parent->jsonRoomList();
newUser->sendMsg(ChatUser::roomList, roomList, "", "");
// Private Rückmeldung an den User: In welchem Raum befindet er/sie sich jetzt?
{
Json::Value msg = Json::objectValue;
msg["tr"] = "room_entered";
msg["to"] = _name;
newUser->sendMsg(ChatUser::system, msg, "", "");
}
// Sende aktuelle Userliste an den neuen User
Json::Value currentUserList = userList();
newUser->sendMsg(ChatUser::userListe, currentUserList, "", "");
@@ -112,8 +106,11 @@ namespace Yc
}
}
// Broadcast an andere Nutzer: Benutzer X hat den Raum betreten (mit Farbinfo)
addMessage(ChatUser::system, "user_entered_room", newUser->name(), newUser->color());
// Broadcast an andere Nutzer: Benutzer X hat den Chat betreten (mit Farbinfo)
#ifdef YC_DEBUG
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());
_initRound();
return true;
}
@@ -174,6 +171,20 @@ namespace Yc
}
}
void ChatRoom::removeUserDisconnected(std::shared_ptr<ChatUser> userToRemove)
{
for (auto it = _users.begin(); it != _users.end(); ++it)
{
if (*it == userToRemove)
{
// Spezielle Nachricht für Verbindungsabbrüche
addMessage(ChatUser::system, std::string("user_disconnected"), (*it)->name(), (*it)->color());
_users.erase(it);
break;
}
}
}
void ChatRoom::setStop()
{
_stop = true;