A partir do sgcWebSockets 2023.2.0, um novo recurso foi implementado para melhorar o Broadcasting de Mensagens do Servidor. Groups é um novo recurso da biblioteca sgcWebSockets que permite organizar conexões (representando clientes, como navegadores) em grupos com nomes. Isso permite transmitir mensagens para todas as conexões de um grupo em vez de enviar a mensagem para cada conexão individualmente. Os Groups do sgcWebSockets são úteis em cenários onde você quer transmitir uma mensagem para um conjunto específico de clientes, como uma sala de chat ou um jogo multiplayer.
Adicionando e removendo usuários
Para adicionar ou remover usuários de um grupo, você chama os métodos Add ou Remove e passa o nome do grupo e a classe TsgcWSConnection. Você não precisa remover manualmente um usuário de um grupo quando a conexão é encerrada.
O exemplo a seguir mostra o método Groups.Add.
procedure OnConnect(Connection: TsgcWSConnection);
begin
TsgcWebSocketServer1.Groups.Add('Room1', Connection);
end;
Enviando Mensagens para um Grupo
Agora, esta conexão está dentro do Group chamado "Room1". Se houver mais usuários neste grupo, você pode simplesmente transmitir uma mensagem para todos os membros do grupo "Room1" usando o método Broadcast.
TsgcWebSocketServer1.Groups.Group['Room1'].Broadcast('Hello Members of Room1');
Ou você pode enviar uma mensagem para todos os grupos que começam com "Room" (então se existirem Room1, Room2, Room3... esses usuários receberão uma mensagem).
TsgcWebSocketServer1.Groups.Broadcast('Room*', 'Hello Members of Room1');
O parâmetro GroupName do Broadcast utiliza a função MatchesMask para saber se o grupo deve ser incluído na mensagem transmitida, portanto você pode usá-lo para configurações avançadas.
Eventos de Grupo
Há 2 eventos que podem ser usados para gerenciar os Groups e Clientes sempre que um novo cliente é adicionado ou removido de um grupo:
- OnClientAdded: chamado toda vez que um usuário é adicionado a um grupo.
- OnClientRemoved: chamado toda vez que um cliente é removido de um grupo (geralmente ao desconectar).
Exemplo: enviar uma mensagem ao grupo quando um membro sai.
TsgcWebSocketServer1.Groups.OnClientRemoved := OnClientRemovedEvent;
procedure OnClientRemovedEvent(Sender: TObject; const aGroup: TsgcWSServerGroupItem;
const aConnection: TsgcWSConnection);
begin
aGroup.BroadCast('Client ' + aConnection.Guid + ' has disconnected');
end;
Veja abaixo uma Demo de Servidor/Cliente que mostra os principais recursos dos Groups do sgcWebSockets.
