【发布时间】:2017-04-04 11:02:24
【问题描述】:
如果我有多个客户端连接到集线器,我将如何使用 JavaScript 从客户端(.aspx)获取所有连接客户端的详细信息。
在SendChatMessage() 方法中,我必须从客户端(.aspx)传递“who”参数,但我如何才能知道这么多连接客户端中特定客户端的连接 ID 或用户名。
public class Chathub : Hub
{
private readonly static ConnectionMapping<string> _connections =
new ConnectionMapping<string>();
public void SendChatMessage(string who, string message)
{
string name = Context.User.Identity.Name;
foreach (var connectionId in _connections.GetConnections(who))
{
Clients.Client(connectionId).addChatMessage(name + ": "message);
}
}
public override Task OnConnected()
{
string name = Context.User.Identity.Name;
_connections.Add(name, Context.ConnectionId);
return base.OnConnected();
}
public class ConnectionMapping<T>
{
private readonly Dictionary<T, HashSet<string>> _connections =
new Dictionary<T, HashSet<string>>();
public int Count
{
get
{
return _connections.Count;
}
}
public void Add(T key, string connectionId)
{
lock (_connections)
{
HashSet<string> connections;
if (!_connections.TryGetValue(key, out connections))
{
connections = new HashSet<string>();
_connections.Add(key, connections);
}
lock (connections)
{
connections.Add(connectionId);
}
}
}
public IEnumerable<string> GetConnections(T key)
{
HashSet<string> connections;
if (_connections.TryGetValue(key, out connections))
{
return connections;
}
return Enumerable.Empty<string>();
}
【问题讨论】:
-
您不应该在这个问题中添加 C# 标签吗?它似乎与 JavaScript 更相关。
标签: javascript c# asp.net signalr