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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user