我希望确保我在使用SignalR库的群组特性时做得正确。
我的做法是允许用户为一个特定项目请求帮助。项目发起者可以将其他用户添加到协作表中参与他们的项目。
Collaboration
(
UserID Uniqueidentifier,
ProjectID INT
)
如果任何一个用户进入协作模式,我希望将该用户添加到一个组中,以便如果另一个用户登录并进入协作模式,则会将其添加到同一组中。这些组始终以
ProjectID
命名。因此,当用户登录并打开项目时,如果该项目在协作表中,则将其添加到
Groups.Add(Context.ConnectionId, projID)
中。以下是我的问题:
当用户从客户端连接并调用OnConnected时,如果不存在具有projID的组,它会抛出错误还是signalr会即时创建该组?
public override Task OnConnected(string projID)
{
return Groups.Add(this.Context.ConnectionId, projID);
}
当客户端关闭浏览器时,OnDisconnected方法会被调用吗?如果该用户因某些原因不在projID组中,这是否会引发错误或signalr会处理这个问题?
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());
}
对于上述所有方法,我是否需要调用每个被覆盖方法的基本方法?