【发布时间】:2016-09-14 21:32:00
【问题描述】:
我在聊天应用程序中使用 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);
};
谁能提出解决方案?
谢谢。
【问题讨论】:
-
什么是 UsersOnline,您确定您获得了正确的 groupName 并且该组不为空吗?
-
@Pawel UsersOnline 是一个包含静态 List
的类,用于添加和删除用户。是的,组名已正确分配给用户,但仍无法传递消息。 -
如何将客户添加到组中? - 显示客户端和服务器代码。
-
@Pawel 请检查上面的更新代码。
-
我仍然看不到调用
AddUsersToGroup的代码以及为用户设置 ConnectionId 的代码。也不知道为什么你有多个 ConnectionIds 给一个用户 - 你总是只使用一个/第一个 id。
标签: javascript c# signalr