2016-09-14 114 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是正確的,您正在創建組,但不會將用戶添加到組本身。