25 lines
1.2 KiB
Markdown
25 lines
1.2 KiB
Markdown
# ConnectionPanel Component
|
|
|
|
## Zweck
|
|
- Stellt Verbindungsstatus dar (WebSocket, Mikrofon) und nimmt Remote-Peer-ID entgegen.
|
|
- Hält Signals für Peer-Verbindung als **Responder** und verwaltet Offer/Answer-Eingang.
|
|
|
|
## Wichtige Signals
|
|
- `peer_id`, `remote_id`, `connected`, `websocket`
|
|
- `peer_connection`: Responder `RtcPeerConnection`
|
|
- `initiator_connection`: Referenz auf Initiator-PC (für Answer/Renegotiation)
|
|
- `local_media`: geteilter `MediaStream`
|
|
|
|
## Ablauf
|
|
1. **Peer-ID generieren** (`use_effect` mit Timestamp + Random).
|
|
2. **WebSocket verbinden** (`ws://localhost:3478/ws`): setzt `onopen/onclose/onmessage` Handler.
|
|
3. **Offer-Coroutine** (`use_coroutine`): empfängt `SignalingMessage` vom Typ `offer`, baut PeerConnection (Responder) und sendet Answer.
|
|
4. **ICE-Kandidaten**: `onicecandidate` sendet Kandidaten zurück; empfangene Kandidaten werden an vorhandene PCs angehängt.
|
|
5. **Audio-Wiedergabe**: `ontrack` erstellt `<audio>` Element und setzt `srcObject`.
|
|
|
|
## Geplante Verbesserungen
|
|
- Room-basierte IDs statt manueller Eingabe.
|
|
- UI-Feedback bei kopierter Peer-ID (Clipboard API).
|
|
- Mehr Statusanzeigen (ICE connected, TURN usage).
|
|
- Fehler-Handling für WebSocket-Disconnects mit Auto-Reconnect.
|