SignalR Server en Client C#

· Componenten

sgcWebSockets ondersteunt de SignalR- en SignalRCore-protocollen; we bekijken nu een voorbeeld van hoe je verbinding maakt met een SignalR-server via een C# -voorbeeld van de CodeProject-website; je vindt het artikel via de volgende link:

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

Dit artikel laat zien hoe je een eenvoudige server en client maakt met SignalR als protocol; de volledige C#-broncode staat op github

https://github.com/nthdeveloper/SignalRSamples

Hieronder laat ik zien hoe je verbinding maakt met deze SignalR-server met de sgcWebSockets-bibliotheek.

Verbinding opzetten

Om verbinding te maken met een SignalR-server gebruiken we TsgcWebSocketClient als WebSocket-client en TsgcWSAPI_SignalR als SignalR-API. Maak eerst de WebSocket-client en de SignalR-API aan en koppel de SignalR-API aan de WebSocket-client.

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

Daarna stel je de gegevens van de serververbinding in. In dit geval luistert de server op url: http://localhost:8080. TsgcWebSocketClient heeft een eigenschap URL waarmee we de URL van de WebSocket-server kunnen instellen; aangezien we het WebSocket-protocol gebruiken, wordt onze url: ws://localhost:8080 

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

 Tot slot vereist SignalR een Hub-naam; in deze demo is de hub-naam simplehub.

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

Daarna kunnen we WSClient.Active := True aanroepen om een nieuwe verbinding te starten. Als de server actief is, ontvangen we een bericht van de server dat de verbinding succesvol is.

Bericht versturen 

 Zodra je verbonden bent, kun je een bericht naar de server versturen; we gebruiken hiervoor de methode WriteData van het TsgcWSAPI_SignalR-component. SignalR gebruikt een eigen protocol; in feite is dit een JSON-bericht met enkele argumenten. In dit voorbeeld heet de methode Send en is het argument een tekstbericht. Berichten worden ontvangen in het OnSignalRMessage-event.

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; 

Join / Leave-berichten 

 Het server-voorbeeld heeft 2 methoden om gebruikers aan een groep toe te voegen of uit een groep te verwijderen. Het berichtformaat lijkt sterk op het Send-bericht; hieronder enkele voorbeelden:

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

Downloaden

Je kunt het gecompileerde project voor C# en Delphi downloaden via de volgende link: