无法向SignalR中的组发送消息

时间:2016-09-14 21:32:00

标签: javascript c# signalr

我在聊天应用程序中使用SignalR 2.2.1。

我正在将用户添加到群组并向群组发送消息。在发送消息时,我正在从用户对象中获取组名,如下所示。

我无法向群组发送消息,而向呼叫者或所有客户端发送消息可以正常工作。

服务器端代码:

public string AddUsersToGroup(string CurrentUserId, string toUserId)
{   
    string strGroupName = GetUniqueGroupName(CurrentUserId, toUserId);
    if (!string.IsNullOrEmpty(toUserId) && !string.IsNullOrEmpty(CurrentUserId))
    {
        string _cnId, _toCnId;
        _cnId = UsersOnline.userObj.Where(item => item.userId == CurrentUserId).Select(item => item.ConnectionIds.FirstOrDefault()).FirstOrDefault();
        _toCnId = UsersOnline.userObj.Where(item => item.userId == toUserId).Select(item => item.ConnectionIds.FirstOrDefault()).FirstOrDefault();
        UsersOnline.userObj.Where(item => item.userId == CurrentUserId).FirstOrDefault().GroupName = strGroupName;
        UsersOnline.userObj.Where(item => item.userId == toUserId).FirstOrDefault().GroupName = strGroupName;

        Groups.Add(_cnId, strGroupName);
        Groups.Add(_toCnId, strGroupName);                               
    }
    return strGroupName;
}

public void Send(string message)
{
    if (Clients != null)
    {
        string _conId = Context.ConnectionId;
        string GroupName = UsersOnline.userObj.Where(item =>   item.ConnectionIds.Contains(_conId)).FirstOrDefault().GroupName;
        Clients.Group(GroupName).broadcastMessage(message); // This doesn't work.
        Clients.All.broadcastMessage(message); // This works.
        Clients.Caller.broadcastmessage(message); // This works.
    }
}

private string GetUniqueGroupName(string CurrentUserId, string toUserId)
{
    return (CurrentUserId.GetHashCode() ^ toUserId.GetHashCode()).ToString();
}

客户端代码:

chat.client.broadcastMessage = function (message) {              
    $('#divMessageBoard').append('<span>' + $('<div/>').text(message).html() + '</span><br/>');
    var divMessageBoard = $('#divMessageBoard');
    $("#divMessageBoard").animate({ scrollTop: $("#divMessageBoard")[0].scrollHeight }, 1000);
};

有人可以建议一个解决方案吗?

感谢。

1 个答案:

答案 0 :(得分:0)

不要使用gethashcode生成组的名称,只有当用户的所有数据都相同时才会匹配结果,如果断开连接,或者connectid更改,组名将不再有效对于那个用户。您可以使用ConnectionId,因为它对每个用户都是唯一的。另外,Pawel是正确的,您正在创建组,但您没有将用户添加到组本身。