2016-09-14 74 views
0

我在我的聊天应用程序中使用SignalR 2.2.1。无法发送消息给SignalR中的组

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

我无法将消息发送到群组,而是将消息发送给调用者或所有客户端均有效。

服务器端代码:

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); 
}; 

任何人都可以请提出一个解决办法?

谢谢。

+0

什么是UsersOnline,你确定你得到一个正确的groupName并且该组不是空的? – Pawel

+0

@Pawel UsersOnline是一个包含静态列表的类,用于添加和删除用户。是的,组名正确地分配给用户,但仍然无法传递消息。 – Vj87

+0

如何将客户添加到组? - 显示客户端和服务器代码。 – Pawel

回答

0

不要使用gethashcode来生成组名称,只有当用户的所有数据都是相同的,并且如果有断开连接或connectionid更改组名称将不再是结果对该用户有效。您可以使用ConnectionId,因为它对每个用户都是唯一的。此外,Pawel是正确的,您正在创建组,但不会将用户添加到组本身。