diff --git a/docs/architecture/runtime_loop.md b/docs/architecture/runtime_loop.md new file mode 100644 index 0000000..9a8b6a1 --- /dev/null +++ b/docs/architecture/runtime_loop.md @@ -0,0 +1,18 @@ +# Runtime Loop & Message Flow + +## Überblick +- Server basiert auf `actix-web` und `actix-ws`. +- Jeder WebSocket-Client erhält eine Session über `actix_ws::handle`. +- `broadcast::channel` (Tokio) fungiert als zentrales Publish/Subscribe-Relay. + +## Ablauf Heute +1. **Handshake**: `/ws` Route akzeptiert WebSocket-Requests. +2. **Incoming Task**: Liest Nachrichten vom Client, deserialisiert `SignalingMessage` und sendet sie in den Broadcast-Kanal. +3. **Outgoing Task**: Abonniert Broadcast (`rx.recv()`) und schreibt jede Nachricht zurück in die Session. +4. **Routing**: Aktuell kein Filter – alle Clients erhalten jede Nachricht. + +## Erweiterungsplan +- **Channel/Room Map**: `HashMap` oder dedizierter Actor für jede Session. +- **Presence Tracking**: Join/Leave Events, Heartbeats. +- **Message Typen**: Offer/Answer/Candidate/Text/Broadcast – sollen im Proto beschrieben werden. +- **Persistente Logs**: Structured Logging via `tracing` mit Session-ID. diff --git a/docs/config/server_config.md b/docs/config/server_config.md new file mode 100644 index 0000000..5752465 --- /dev/null +++ b/docs/config/server_config.md @@ -0,0 +1,23 @@ +# Server-Konfiguration + +## Dateien +- `appsettings.example.json`: Vorlage mit `bind` Adresse. +- `appsettings.json`: Produktiveinstellung (wird beim Start geladen). + +## Struktur +``` +Config { + server: ServerOptions { + bind: String, + } +} +``` + +## Defaults (siehe `constants.rs`) +- `DEFAULT_BIND = "127.0.0.1:3478"` +- `DEFAULT_HOST_URL = "http://localhost:3478"` + +## TODOs +- Unterschiedliche Ports für HTTP vs WS (derzeit identisch). +- TLS-/WSS-Unterstützung. +- Konfigurierbare Allowed Origins, TURN Secrets. diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..2fb5b3b --- /dev/null +++ b/docs/index.md @@ -0,0 +1,11 @@ +# niom-signaling Docs + +Kurzdokumentation für den Signaling-Server. Struktur orientiert sich an den Hauptkomponenten (`src/main.rs`, `config`, `constants`). + +- [`architecture/runtime_loop.md`](architecture/runtime_loop.md) – Verbindungshandling & Broadcast. +- [`config/server_config.md`](config/server_config.md) – Bind-Adressen und Defaults. + +## Zielsetzung +- Rooms/Channels anstelle globalem Broadcast. +- Authentifizierung & Health-Checks. +- Testbare, deterministische Nachrichtenzustellung.