Od wersji sgcWebSockets 2023.2.0 zaimplementowano nową funkcję poprawiającą rozsyłanie wiadomości przez serwer. Grupy to nowa funkcja biblioteki sgcWebSockets, która pozwala organizować połączenia (reprezentujące klientów, takich jak przeglądarki) w nazwane grupy. Umożliwia to rozsyłanie wiadomości do wszystkich połączeń w grupie zamiast wysyłania wiadomości do każdego połączenia osobno. Grupy sgcWebSockets są przydatne w scenariuszach, w których chcesz rozesłać wiadomość do określonego zestawu klientów, na przykład w pokoju czatu lub grze wieloosobowej.
Dodawanie i usuwanie użytkowników
Aby dodać lub usunąć użytkowników z grupy, wywołaj metodę Add lub Remove, przekazując nazwę grupy i klasę TsgcWSConnection. Nie musisz ręcznie usuwać użytkownika z grupy po zakończeniu połączenia.
Poniższy przykład pokazuje metodę Groups.Add.
procedure OnConnect(Connection: TsgcWSConnection);
begin
TsgcWebSocketServer1.Groups.Add('Room1', Connection);
end;
Wysyłanie wiadomości do grupy
To połączenie należy teraz do grupy o nazwie „Room1". Jeśli w tej grupie jest więcej użytkowników, możesz rozesłać wiadomość do wszystkich członków grupy „Room1" za pomocą metody Broadcast.
TsgcWebSocketServer1.Groups.Group['Room1'].Broadcast('Hello Members of Room1');
Możesz też wysłać wiadomość do wszystkich grup zaczynających się od „Room" (jeśli istnieją Room1, Room2, Room3… wszyscy ich użytkownicy otrzymają wiadomość).
TsgcWebSocketServer1.Groups.Broadcast('Room*', 'Hello Members of Room1');
Parametr GroupName metody Broadcast używa funkcji MatchesMask, aby sprawdzić, czy dana grupa ma zostać uwzględniona w rozsyłanej wiadomości — możesz go używać do zaawansowanej konfiguracji.
Zdarzenia grup
Dostępne są 2 zdarzenia do obsługi grup i klientów za każdym razem, gdy nowy klient jest dodawany do grupy lub z niej usuwany:
- OnClientAdded: wywoływane za każdym razem, gdy użytkownik jest dodawany do grupy.
- OnClientRemoved: wywoływane za każdym razem, gdy klient jest usuwany z grupy (zazwyczaj po rozłączeniu).
Przykład: wyślij wiadomość do grupy, gdy członek ją opuszcza.
TsgcWebSocketServer1.Groups.OnClientRemoved := OnClientRemovedEvent;
procedure OnClientRemovedEvent(Sender: TObject; const aGroup: TsgcWSServerGroupItem;
const aConnection: TsgcWSConnection);
begin
aGroup.BroadCast('Client ' + aConnection.Guid + ' has disconnected');
end;
Poniżej znajdziesz demo serwer/klient prezentujące główne funkcje grup sgcWebSockets.
