SignalR ライブラリのグループ機能を正しく実装していることを確認したいと考えています。
私がやっていることは、ユーザーが特定のプロジェクトについて助けを求められるようにすることです。プロジェクトを開始したユーザーは、プロジェクトのコラボレーション テーブルに他のユーザーを追加できます。
Collaboration
(
UserID Uniqueidentifier,
ProjectID INT
)
いずれかのユーザーがコラボレーション モードに入った場合、そのユーザーをグループに追加したいので、別のユーザーがログオンしてコラボレーション モードに入ると、同じグループに追加されます。グループには常に という名前が付けられますProjectID
。
そのため、ユーザーがログオンしてプロジェクトを開くと、そのプロジェクトがコラボレーション テーブルにある場合、それらをGroups.Add(Conext.ConnectionId,projID)
;に追加します。
ここに私の質問があります:
ユーザーがクライアントから接続し、projID を持つグループが存在しない場合に OnConnected が呼び出されると、これはエラーをスローするか、シグナルはそのグループをオンザフライで作成しますか?
public override Task OnConnected(string projID)
{
return Groups.Add(this.Context.ConnectionId, projID);
}
クライアントがブラウザを閉じたとき、それは OnDisconnected が呼び出されたときですか? そして、何らかの理由でそのユーザーが前述のprojIDグループに属していない場合、これはスローされてエラーになりますか、それともシグナルはこれを処理しますか?
public override Task OnConnected(string projID)
{
return Groups.Add(this.Context.ConnectionId, projID);
}
OnReconnected の場合、これは、ユーザーがログオフして別のことを行ってから再度ログオンすると、接続が失われる前に所属していたグループに自動的に追加されるということですか?
public override Task OnReconnected(string projID)
{
return Clients.Group(projID).rejoined(Context.ConnectionId,
DateTime.Now.ToString());
}
上記のすべてのメソッドについて、オーバーライドされた各メソッドの基本メソッドを呼び出す必要がありますか?