我正在使用SignalR进行我的第一次测试。我正在玩聊天消息,但这只是我今天在我的网站上替换所有从客户端到服务器的轮询的第一步。
我有很多场景需要通过登录或ID来通知某些用户。我的想法是,我在连接后立即将每个用户添加到两个组。我在OnConnected中执行此操作并调用该事件。
当我发送聊天消息时,我有两种模式:公共或个人。如果是个人的,则通知发件人并通知收件人。发件人收到一条消息但该组永远不会。似乎不可能发现一个团体有多少成员。
任何想法在这里出了什么问题?
public class GlobalHub:Hub
{
private Users user;
private void AuthenticateUser()
{
var ydc = new MyDataContext();
user = ydc.Users.First(u => u.Login == HttpContext.Current.User.Identity.Name);
}
public override Task OnConnected()
{
var ydc = new MyDataContext();
user = ydc.Users.First(u => u.Login == HttpContext.Current.User.Identity.Name);
Groups.Add(Context.ConnectionId, user.Login);
Groups.Add(Context.ConnectionId, user.ID.ToString());
return base.OnConnected();
}
public void SendChatMessage(string message, string recipient)
{
AuthenticateUser();
var cm = ChatController.AddChatMessage(user.Login, user.ID, recipient, tmessage);
if (recipient != "")
{
Clients.Caller.NewMessage(cm);
Clients.Group(recipient).NewMessage(cm);
}
else
{
Clients.All.NewMessage(cm);
}
}
}
答案 0 :(得分:1)
看起来Groups.Add不会立即加入与该组的连接,而是返回需要启动的Task。尝试返回Groups.Add的结果作为OnConnectedMethod的结果。