# 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.