Files
yourchat/README.md
Torsten Schulz (local) 7338f1a740 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.
2025-08-16 22:43:08 +02:00

112 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.