- 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.
112 lines
3.4 KiB
Markdown
112 lines
3.4 KiB
Markdown
# 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.
|