Servidor e cliente SignalR em C#

· Componentes

sgcWebSockets suporta SignalR and SignalRCore protocols, now we will see an example of how connect to a SignalR Server usando a c# sample from CodeProject webpage, você pode access to article usando the following link:

https://www.codeproject.com/Articles/5162436/Simple-SignalR-Server-and-Client-Applications-Demo#_articleTop

Este artigo mostra como criar um servidor e um cliente simples usando SignalR como protocolo. O código C# completo está hospedado no GitHub

https://github.com/nthdeveloper/SignalRSamples

Nas linhas a seguir, vou mostrar como conectar a esse servidor SignalR usando a biblioteca sgcWebSockets.

Iniciar conexão

Para conectar a um servidor SignalR, vamos usar o TsgcWebSocketClient como cliente WebSocket e o TsgcWSAPI_SignalR como API SignalR. Crie primeiro o cliente WebSocket e a API SignalR, e então associe a API SignalR ao cliente WebSocket.

WSClient := TsgcWebSocketClient.Create(nil);
SignalRAPI := TsgcWSAPI_SignalR.Create(nil);
SignalRAPI.Client := WSClient; 

Em seguida, defina os dados de conexão do servidor. Neste caso, o servidor está escutando na url: http://localhost:8080. O TsgcWebSocketClient tem uma propriedade chamada URL onde definimos a URL do servidor WebSocket; como vamos usar o protocolo WebSocket, nossa url será: ws://localhost:8080 

WSClient.URL := 'ws://localhost:8080'; 

 Por fim, o SignalR exige um nome de Hub; neste demo, o nome do hub é simplehub.

  SignalRAPI.SignalR.Hubs.Clear;
  SignalRAPI.SignalR.Hubs.Add('simplehub'); 

Então, podemos chamar WSClient.Active := True para iniciar uma nova conexão. Se o servidor estiver ativo, receberemos uma mensagem do servidor informando que a conexão foi bem-sucedida.

Enviar mensagem 

 Uma vez conectados, podemos enviar uma mensagem ao servidor; usaremos o método WriteData do componente TsgcWSAPI_SignalR. O SignalR usa um protocolo proprietário, basicamente uma mensagem JSON com alguns argumentos. Neste exemplo, o método é Send e o argumento é a mensagem de texto. As mensagens são recebidas no evento OnSignalRMessage.

SignalRAPI.WriteData(Format('{"H":"simplehub","M":"Send","A":["%s"],"I":1}', [txtMessage.Text]));
procedure OnSignalRSignalRMessage(Sender: TObject; MessageId, aData: string);
begin
  DoLog('[' + MessageId + '] ' + aData);
end; 

Mensagens de entrada / saída 

 O exemplo do servidor tem 2 métodos para entrar e sair de um grupo de usuários. O formato da mensagem é muito parecido com o do Send; vamos ver alguns exemplos:

// join myGroup
SignalRAPI.WriteData(Format('{"H":"simplehub","M":"JoinGroup","A":["%s"],"I":2}', ['myGroup']));
// leave myGroup
SignalRAPI.WriteData(Format('{"H":"simplehub","M":"LeaveGroup","A":["%s"],"I":3}', ['myGroup'])); 

Download

Você pode baixar o projeto compilado para C# e Delphi pelo link a seguir: