SignalR サーバーと C# クライアント

· コンポーネント

sgcWebSockets は SignalR および SignalRCore プロトコルをサポートしています。ここでは、CodeProject の C# サンプルを使って SignalR サーバーに接続する例を紹介します。元記事は次のリンクから参照できます:

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

この記事では、SignalR をプロトコルとして使ったシンプルなサーバーとクライアントを作成する方法を説明しており、C# のフルソースは GitHub にホストされています。

https://github.com/nthdeveloper/SignalRSamples

以下では、sgcWebSockets ライブラリを使ってこの SignalR サーバーに接続する方法を解説します。

接続を開始する

SignalR サーバーに接続するには、WebSocket クライアントとして TsgcWebSocketClient を、SignalR API として TsgcWSAPI_SignalR を使用します。まず WebSocket クライアントと SignalR API を作成し、SignalR API を WebSocket クライアントに割り当ててください。

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

続いてサーバーの接続情報を設定します。本例では、サーバーは URL http://localhost:8080 でリッスンしています。TsgcWebSocketClient には WebSocket サーバーの URL を設定するための URL プロパティがあり、WebSocket プロトコルを使うため URL は ws://localhost:8080 となります。 

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

 最後に、SignalR は Hub 名を必要とします。本デモでは Hub 名は simplehub です。

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

その後、WSClient.Active := True を呼び出して新しい接続を開始できます。サーバーが稼働していれば、接続成功を知らせるメッセージをサーバーから受信します。

メッセージを送信する 

 接続が完了したら、サーバーへメッセージを送信できます。 TsgcWSAPI_SignalR コンポーネントの WriteData メソッドを使用します。SignalR は独自プロトコルを使用し、基本的にはいくつかの引数を持つ JSON メッセージです。本例ではメソッド名は Send、引数はテキストメッセージです。受信メッセージは 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; 

グループへの参加・退出メッセージ 

 サーバーサンプルには、グループにユーザーを参加・退出させる 2 つのメソッドがあります。メッセージフォーマットは Send メッセージと非常に似ています。いくつかの例を見てみましょう:

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

ダウンロード

C# と Delphi のコンパイル済みプロジェクトは、次のリンクからダウンロードできます: