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