Torsten Schulz (local) e48a38e86d Füge Unterstützung für Farbänderungen in ChatUser und SSLServer hinzu
- Implementiere die Methode `setColor` in `ChatUser`, um die Benutzerfarbe zu aktualisieren und in der Datenbank zu speichern, falls eine ID vorhanden ist.
- Ergänze die Verarbeitung von Farbänderungen im `SSLServer`, um die Benutzerfarbe über WebSocket-Nachrichten zu ändern und entsprechende Benachrichtigungen an die Räume zu senden.
- Füge Debug-Ausgaben hinzu, um den Ablauf der Farbänderungen zu protokollieren und die Nachverfolgbarkeit zu verbessern.
2025-09-05 14:48:33 +02:00
2020-08-07 10:18:51 +02:00

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:
      {
        "type": "token",
        "message": "IhrTokenString"
      }
      
  3. Authentifizierung und erste Aktion

    • Sende ab jetzt bei jeder Nachricht das Feld token mit.
    • Beispiel für einen Raumbeitritt:
      {
        "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:
{
  "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.

Description
No description provided
Readme 177 KiB
Languages
C++ 85.2%
Shell 14%
CMake 0.8%