# yourchat2 Rust-basierter Chat-Service/Daemon zur Entlastung des Backends von `YourPart3`. Die Kommunikation erfolgt ueber WebSocket (Frontend) und optional TCP/Unix-Socket (Bridge/Backend). ## Features - Asynchroner WebSocket-Server fuer `MultiChatDialog` (Standard `0.0.0.0:1235`) - Zusaetzlicher TCP-Server fuer `chatTcpBridge.js` (Standard `127.0.0.1:1236`) - Optional zusaetzlicher Unix Domain Socket - In-Memory-Room-Management - Token-basierte Session-Absicherung pro Verbindung - Username-Pruefung (3-32 Zeichen, `[a-zA-Z0-9_]`) - Verhindert Mehrfach-Login mit identischem Namen (`loggedin`) - Optionale Allowlist fuer User via `CHAT_ALLOWED_USERS` - Optionale DB-basierte User-Pruefung via Postgres (`CHAT_DB_URL`) - Kompatible Antworttypen fuer die bestehende `chatTcpBridge.js` ## Start ```bash cd ~/Programs/yourchat2 cargo run --release ``` Der Server lauscht danach standardmaessig auf: - `ws://0.0.0.0:1235` (Frontend `MultiChatDialog`) - `tcp://127.0.0.1:1236` (Backend-Bridge) ## Konfiguration (Umgebungsvariablen) - `CHAT_WS_ADDR` (default: `0.0.0.0:1235`) - `CHAT_TCP_ADDR` (default: `127.0.0.1:1236`) - `CHAT_UNIX_SOCKET` (optional, z. B. `/run/yourchat2/yourchat2.sock`) - `CHAT_ALLOWED_USERS` (optional, CSV-Liste erlaubter Usernamen, z. B. `alice,bob,carol`) - `CHAT_DB_URL` (optional, PostgreSQL-Connection-String fuer Community-/Chat-User-Checks) - `SECRET_KEY` (benoetigt fuer Entschluesselung verschluesselter Birthdate-Werte aus der DB) Beispiel: ```bash CHAT_WS_ADDR=0.0.0.0:1235 CHAT_TCP_ADDR=127.0.0.1:1236 CHAT_UNIX_SOCKET=/tmp/yourchat2.sock cargo run --release ``` ## Protokoll (Kurzfassung) Alle Requests/Responses sind JSON-Objekte. - WebSocket: ein JSON pro Frame (Text) - TCP/Unix-Socket: newline-delimited JSON ### Eingehende Commands - `{"type":"init","name":"alice","room":"lobby"}` - `{"type":"join","room":"sports","token":"..."}` - `{"type":"message","message":"Hi","token":"..."}` - `{"type":"scream","message":"Hallo alle","token":"..."}` - `{"type":"do","message":"winkt","token":"..."}` - `{"type":"dice","message":"1d6","token":"..."}` - `{"type":"roll","value":4,"token":"..."}` - `{"type":"color","value":"#33aaee","token":"..."}` - `{"type":"rooms","token":"..."}` - `{"type":"userlist","token":"..."}` - `{"type":"start_dice_game","rounds":3,"token":"..."}` - `{"type":"end_dice_game","token":"..."}` - `{"type":"reload_rooms","token":"..."}` - `{"type":"ping"}` Zusatz: Bei `{"type":"message", ...}` werden Slash-Commands erkannt: - `/join [password]` - `/color ` - `/dice [expr]` oder `/roll [expr]` - `/start_dice_game ` - `/end_dice_game` - `/reload_rooms` - `/do ` - `/scream ` - `/rooms` und `/userlist` Wenn `CHAT_DB_URL` gesetzt ist, prueft `init` den User gegen `community."user"`. Falls fuer den Community-User noch kein Eintrag in `chat."user"` existiert, wird er automatisch angelegt. Farbe und Rechte werden aus der DB geladen. Fuer Alterspruefungen in Raeumen wird `community.user_param.value` (birthdate) per AES-256-ECB mit einem via scrypt aus `SECRET_KEY` abgeleiteten Schluessel entschluesselt (kompatibel zur Alt-App). ### Wichtige Antworten - Token: `{"type":1,"message":""}` - Roomliste: `{"type":3,"message":[{"name":"lobby","users":2}]}` - Room betreten: `{"type":5,"message":"room_entered","to":"lobby"}` - Farbaenderung: `{"type":5,"message":"color_changed","userName":"alice","color":"#33aaee"}` - Normale Message: `{"type":"message","userName":"alice","message":"Hi","color":"#33aaee"}` - Scream: `{"type":6,"userName":"alice","message":"Hallo alle","color":"#33aaee"}` ## Integration mit `YourPart3` In `YourPart3/backend/config/chatBridge.json` sollte stehen: ```json { "host": "127.0.0.1", "port": 1236 } ``` Dann verbindet sich die bestehende Bridge (`chatTcpBridge.js`) direkt mit `yourchat2`. ## Systemd (optional) Es liegt eine Produktions-nahe Unit-Datei `yourchat2.service` im Projekt. Zusaetzlich gibt es ein Installationsskript `install-systemd.sh`, das: - Release-Binary baut - Binary nach `/usr/local/bin/yourchat2` installiert - Unit nach `/etc/systemd/system/yourchat2.service` installiert - Arbeitsverzeichnis `/var/lib/yourchat2` erstellt - Environment-Datei unter `/etc/yourchat2/yourchat2.env` anlegt (falls nicht vorhanden) - Service aktiviert und startet Installation: ```bash cd /home/tsschulz/Programs/yourchat2 sudo ./install-systemd.sh ``` Danach Konfiguration ueber: - `/etc/yourchat2/yourchat2.env` Wichtige Variablen fuer produktiven Betrieb: - `CHAT_DB_URL` - `SECRET_KEY`