SignalR Servidor y Cliente en C#

· Componentes

sgcWebSockets es compatible con los protocolos SignalR y SignalRCore. Ahora veremos un ejemplo de cómo conectarse a un servidor SignalR usando un ejemplo en C# de la web CodeProject; puedes acceder al artículo en el siguiente enlace:

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

Este artículo muestra cómo crear un servidor y un cliente sencillos usando SignalR como protocolo; el código fuente completo en C# está alojado en GitHub

https://github.com/nthdeveloper/SignalRSamples

En las siguientes líneas mostraremos cómo conectarse a este servidor SignalR usando la biblioteca sgcWebSockets.

Iniciar la conexión

Para conectarse a un servidor SignalR, usaremos TsgcWebSocketClient como cliente WebSocket y TsgcWSAPI_SignalR como API de SignalR. Crea primero el cliente WebSocket y la API de SignalR y enlaza la API de SignalR al cliente WebSocket.

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

Después debes configurar los datos de conexión del servidor. En este caso, el servidor está escuchando en la URL: http://localhost:8080. TsgcWebSocketClient tiene una propiedad llamada URL donde podemos establecer la URL del servidor WebSocket; como usaremos el protocolo WebSocket, nuestra URL será: ws://localhost:8080 

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

 Por último, SignalR requiere un nombre de Hub; en esta demo el nombre del hub es simplehub.

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

Después podemos llamar a WSClient.Active := True para iniciar una nueva conexión. Si el servidor está activo, recibiremos un mensaje del servidor informando de la conexión correcta.

Enviar mensaje 

 Una vez conectados, podemos enviar un mensaje al servidor; usaremos el método WriteData del componente TsgcWSAPI_SignalR. SignalR usa un protocolo propietario; en esencia, es un mensaje JSON con algunos argumentos. En este ejemplo, el método se llama Send y el argumento es un mensaje de texto. Los mensajes se reciben en el 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; 

Mensajes de Join / Leave 

 El ejemplo de servidor tiene 2 métodos para añadir y eliminar usuarios de un grupo. El formato del mensaje es muy similar al de Send; veamos algunos ejemplos:

// 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'])); 

Descarga

Puedes descargar el proyecto compilado para C# y Delphi en el siguiente enlace: