Panel prowadzenia: lista osob na sali i usuwanie po stronie serwera
Deploy PROD / deploy (push) Successful in 26s

Karta "Na sali" pokazuje liczbe i liste obecnych (przy LiveKit prosto
z serwera pokoju, przy innych dostawcach z sygnalow obecnosci), z
wyszukiwaniem, paginacja, wyciszeniem na czacie i usuwaniem z sali.

Usuniecie uczestnika z zapisu blokuje go i wyrzuca przez
removeParticipant; dotad sale opuszczala tylko posluszna przegladarka.
Blokada z czatu robi to samo i pyta o potwierdzenie. Zablokowany nie
pisze juz na czacie. Prowadzacego nie da sie usunac.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-28 08:39:45 +02:00
parent 4f21af5f80
commit e9bb4af59f
10 changed files with 930 additions and 9 deletions
+22
View File
@@ -1671,6 +1671,28 @@ Tabela `speak_requests` (V17), kolejka w panelu prowadzenia, temat WebSocket
czekajacy piec minut widzi, jak mowi ktos zgloszony przed chwila.
- Pilnuje tego `SpeakRequestTest`, w tym dziesiec rownoczesnych zgloszen.
### Obecni na sali w panelu prowadzenia
Karta "Na sali" (`RoomParticipants`), endpointy `/admin/webinars/{id}/room/participants`.
- **Przy LiveKit lista pochodzi z serwera pokoju** (`RoomServiceClient.listParticipants`),
a nie z naszej bazy. Tylko serwer wie, kto faktycznie odbiera obraz, i tylko tam
widac polaczenia spoza zapisu (klient z kluczem API, pozostalosc po tescie).
Przy pozostalych dostawcach zrodlem sa sygnaly obecnosci; pole `source` mowi,
ktore odpowiedzialo. Awaria serwera pokoju przelacza na sygnaly, nie wywraca karty.
- **Ukryci uczestnicy (Egress) nie sa osobami** i nie trafiaja na liste.
- **Usuniecie uczestnika z zapisu to BLOKADA plus wyrzucenie po stronie serwera.**
Samo wyrzucenie nic nie daje, bo wrocilby tym samym linkiem. Zdarzenie BANNED
wyprowadza wylacznie posluszna przegladarke: bot albo wlasny klient zostawaly
na sali, dlatego `removeParticipant` wola takze blokada z czatu.
- **Prowadzacego (`spk-`) nie da sie usunac.** Przy liscie dwustu osob omylkowe
klikniecie jest realne, a webinar zostalby bez obrazu.
- **Zablokowany nie pisze na czacie.** Interceptor STOMP sprawdza blokade tylko
przy CONNECT, wiec `postChat` sprawdza ja przy kazdej wiadomosci.
- Lista jest **odpytywana co 10 sekund**, bo wejscie i wyjscie widzi serwer wideo,
a nie nasz backend: nie ma zdarzenia do rozeslania. Paginacja i wyszukiwanie
po stronie backendu; liczniki dotycza calej sali, nie wyniku wyszukiwania.
### Tryb otwartego mikrofonu
Kolumna `webinars.open_mic` (V18), przelacznik w panelu prowadzenia.