허브에 연결된 클라이언트가 여러 개인 경우 JavaScript를 사용하여 클라이언트 측 (.aspx)에서 연결된 클라이언트의 세부 정보를 얻는 방법은 무엇입니까?
SendChatMessage()
메서드에서 클라이언트 측 (.aspx)에서 "who"매개 변수를 전달해야하지만 너무 많은 연결된 클라이언트 중 특정 클라이언트의 연결 ID 또는 사용자 이름을 알 수있는 방법은 무엇입니까? 특정 클라이언트에 메시지를 전송하는 동안SignalR을 사용하여 특정 클라이언트에게 메시지를 보내는 방법
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# 태그를 추가하면 안됩니까? 그것은 자바 스크립트보다 더 많은 관련이있는 것으로 보인다. – evolutionxbox