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:
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:
