7338f1a740d53164b305df9bbb7855d8cc57bce0
- Implementiere neue Funktionen in der ChatRoom-Klasse für das Starten, Rollen und Beenden von Würfelspielen. - Füge eine Option zur Aktivierung von Debug-Logging in CMake hinzu, um die Entwicklung zu erleichtern. - Aktualisiere die ChatUser-Klasse, um die Interaktion mit dem Würfelspiel zu ermöglichen. - Verbessere die Socket-Verwaltung im Server, um WebSocket-Verbindungen zu unterstützen und die Handhabung von Anfragen zu optimieren. - Aktualisiere die Konfiguration, um die neue Funktionalität zu unterstützen und die Benutzererfahrung zu verbessern.
YourChat – Technische Dokumentation
1. Systemübersicht
YourChat ist ein serverbasiertes Chat-System mit Mehrbenutzer-Unterstützung, Raumverwaltung, Rechtesystem und Datenbankanbindung. Die Kommunikation erfolgt über TCP-Sockets mit JSON-basierten Nachrichten.
2. Socket-Verbindung
- Protokoll: TCP
- Port: Konfigurierbar (siehe
config/chatconfig.json) - Verbindung:
- Client verbindet sich per TCP an den Server.
- Nach Verbindungsaufbau erfolgt ein Handshake (Token-Authentifizierung).
2a. Verbindung als User (Schritt-für-Schritt)
-
TCP-Verbindung herstellen
- Verbinde dich per TCP-Client (z.B.
telnet,nc, eigenes Programm) zum Server:- Host/IP: wie in
config/chatconfig.jsonangegeben - Port: wie in
config/chatconfig.jsonangegeben
- Host/IP: wie in
- Verbinde dich per TCP-Client (z.B.
-
Handshake/Token
- Nach Verbindungsaufbau sendet der Server ein JSON mit dem Feld
type: tokenund einem zufälligen Token-String. - Beispiel:
{ "type": "token", "message": "IhrTokenString" }
- Nach Verbindungsaufbau sendet der Server ein JSON mit dem Feld
-
Authentifizierung und erste Aktion
- Sende ab jetzt bei jeder Nachricht das Feld
tokenmit. - Beispiel für einen Raumbeitritt:
{ "type": "join", "token": "IhrTokenString", "newroom": "Lobby", "password": "" }
- Sende ab jetzt bei jeder Nachricht das Feld
-
Nachrichten senden
- Jede weitere Aktion (Chat, Würfeln, Userliste, ...) erfolgt als JSON mit dem Token.
3. Authentifizierung & User-Flow
- Nach Verbindungsaufbau sendet der Server ein Token.
- Der Client muss dieses Token für alle weiteren Nachrichten mitsenden.
- Userdaten werden aus der Datenbank geladen oder bei Erstverbindung angelegt.
4. Befehle & Nachrichtenformate
Alle Nachrichten werden als JSON-Objekte übertragen. Wichtige Felder:
type: Nachrichtentyp (z.B.message,join,userlist,dice, ...)token: Authentifizierungstokenmessage: Textnachricht oder BefehluserName,color: User-Infos- Beispiel:
{
"type": "message",
"token": "...",
"message": "Hallo Welt!",
"userName": "Alice",
"color": "#ff0000"
}
Wichtige Befehle
message: Normale Chatnachrichtjoin: Raumwechsel (newroom,password)userlist: Userliste anforderndice: Würfelndo: Emote/Handlungscream: Schreien
5. Datenstrukturen
User (Datenbank: chat.user)
id: intfalukant_user_id: int (Referenz auf Community-User)display_name: stringcolor: string (Hex)show_gender: boolshow_age: boolcreated_at,updated_at: string (ISO-Timestamp)rights: [string]
Room (Datenbank: chat.room)
id: intname: stringtype: int (Bitmaske, z.B. dice, poker, password)password: stringcreated_at,updated_at: string
Rechte (Datenbank: chat.rights, chat.user_rights)
id: inttr: string (Rechtebezeichner)
6. Konfigurationsdateien
config/chatconfig.json: Serverport, DB-Zugang, Raumvorgaben etc.
7. Beispielablauf
- Client verbindet sich via TCP.
- Server sendet Token.
- Client authentifiziert sich mit Token und sendet z.B. eine
join-Nachricht. - Server prüft Rechte, Raum, etc. und antwortet entsprechend.
8. Erweiterbarkeit
- Neue Befehle können durch Erweiterung der
type-Felder und Serverlogik ergänzt werden. - Datenbankstruktur ist flexibel für weitere User- oder Raumattribute.
Für Details zu einzelnen Klassen siehe Quellcode in src/core/, src/object/ und die Datenbankschemata.
Description
Languages
C++
85.2%
Shell
14%
CMake
0.8%