しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

ASP.NET SignalR 1.0.0 でのクライアント管理

ASP.NET SignalR では、今まで Hub クラスに実装されていたプロパティが微妙に異なっています。

特に大きい変更点としては Clients プロパティの型が dynamic から HubConnectionContext 型に変わりました。それによって今までと記述方法が多少変わり、そして今までよりも柔軟なプッシュが可能となりました。

0.5.3

// 全てのクライアントへブロードキャスト
Clients.ReceiveMessage(message);

// 特定のクライアントへのプッシュ
Clients[connectionId].ReceiveMessage(message);

// 特定のグループへのブロードキャスト
Clients[groupName].ReceiveMessage(message);

// メソッドを呼び出したクライアントへプッシュ
Caller.ReceiveMessage(message);

1.0.0 alpha 1

// 全てのクライアントへブロードキャスト
Clients.All.ReceiveMessage(message);

// 特定のクライアントへのプッシュ
Clients.Client(connectionId).ReceiveMessage(message);

// 特定のグループへのブロードキャスト
Clients.Group(groupName).ReceiveMessage(message);

// メソッドを呼び出したクライアントへプッシュ
Clients.Caller.ReceiveMessage(message);

// 新規:特定のクライアントを除いた全てへブロードキャスト
Clients.AllExcept(connectionId).ReceiveMessage(message);

// 新規:呼び出したクライアント以外へブロードキャスト
Clients.Others.ReceiveMessage(message);

// 新規:特定のグループ以外へのブロードキャスト
Clients.OthersInGroup(groupName).ReceiveMessage(message);

今までは Clients を使って自分自身にもプッシュが行われるという状態でしたが、1.0.0 からは Others などを使うことで回避することが出来るようになりました。