Füge Unterstützung für Würfelspiele hinzu und verbessere Debugging-Optionen

- 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.
This commit is contained in:
Torsten Schulz (local)
2025-08-16 22:43:08 +02:00
parent 864d86aa09
commit 7338f1a740
15 changed files with 1556 additions and 135 deletions

111
README.md Normal file
View File

@@ -0,0 +1,111 @@
# 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)
1. **TCP-Verbindung herstellen**
- Verbinde dich per TCP-Client (z.B. `telnet`, `nc`, eigenes Programm) zum Server:
- Host/IP: wie in `config/chatconfig.json` angegeben
- Port: wie in `config/chatconfig.json` angegeben
2. **Handshake/Token**
- Nach Verbindungsaufbau sendet der Server ein JSON mit dem Feld `type: token` und einem zufälligen Token-String.
- Beispiel:
```json
{
"type": "token",
"message": "IhrTokenString"
}
```
3. **Authentifizierung und erste Aktion**
- Sende ab jetzt bei jeder Nachricht das Feld `token` mit.
- Beispiel für einen Raumbeitritt:
```json
{
"type": "join",
"token": "IhrTokenString",
"newroom": "Lobby",
"password": ""
}
```
4. **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`: Authentifizierungstoken
- `message`: Textnachricht oder Befehl
- `userName`, `color`: User-Infos
- Beispiel:
```json
{
"type": "message",
"token": "...",
"message": "Hallo Welt!",
"userName": "Alice",
"color": "#ff0000"
}
```
### Wichtige Befehle
- `message`: Normale Chatnachricht
- `join`: Raumwechsel (`newroom`, `password`)
- `userlist`: Userliste anfordern
- `dice`: Würfeln
- `do`: Emote/Handlung
- `scream`: Schreien
## 5. Datenstrukturen
### User (Datenbank: `chat.user`)
- `id`: int
- `falukant_user_id`: int (Referenz auf Community-User)
- `display_name`: string
- `color`: string (Hex)
- `show_gender`: bool
- `show_age`: bool
- `created_at`, `updated_at`: string (ISO-Timestamp)
- `rights`: [string]
### Room (Datenbank: `chat.room`)
- `id`: int
- `name`: string
- `type`: int (Bitmaske, z.B. dice, poker, password)
- `password`: string
- `created_at`, `updated_at`: string
### Rechte (Datenbank: `chat.rights`, `chat.user_rights`)
- `id`: int
- `tr`: string (Rechtebezeichner)
## 6. Konfigurationsdateien
- `config/chatconfig.json`: Serverport, DB-Zugang, Raumvorgaben etc.
## 7. Beispielablauf
1. Client verbindet sich via TCP.
2. Server sendet Token.
3. Client authentifiziert sich mit Token und sendet z.B. eine `join`-Nachricht.
4. 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.