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:
111
README.md
Normal file
111
README.md
Normal 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.
|
||||
Reference in New Issue
Block a user