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);
};
任何人都可以請提出一個解決辦法?
謝謝。
什麼是UsersOnline,你確定你得到一個正確的groupName並且該組不是空的? – Pawel
@Pawel UsersOnline是一個包含靜態列表的類,用於添加和刪除用戶。是的,組名正確地分配給用戶,但仍然無法傳遞消息。 –
Vj87
如何將客戶添加到組? - 顯示客戶端和服務器代碼。 – Pawel