2017-04-04 24 views
2

複数のクライアントがハブに接続されている場合、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>(); 
    } 
+1

この質問にC#タグを追加してはいけませんか?それはJavaScriptよりもそれに関連しているようです。 – evolutionxbox

答えて

0

は、あなたがチャットを更新するために、これはクライアント方式であることを

public void SendPrivateMessage(string toUserId, string message) 
     { 

      string fromUserId = Context.ConnectionId; 

      var toUser = ConnectedUsers.FirstOrDefault(x => x.ConnectionId == toUserId) ; 
      var fromUser = ConnectedUsers.FirstOrDefault(x => x.ConnectionId == fromUserId); 

      if (toUser != null && fromUser!=null) 
      { 
       // send to 
       Clients.Client(toUserId).sendMessage(fromUserId, fromUser.UserName, message); 

       // send to caller user as well to update caller chat 
       Clients.Caller.sendMessage(toUserId, fromUser.UserName, message); 
      } 

     } 

Clients.Caller.sendMessage(toUserId, fromUser.UserName, message);ノートクライアントからchathub.server.sendMessage()を呼び出す必要があります。あなたはjQueryのを使用する必要がIDを取得するには、そのspecific useridを渡すことができる場所、クライアント側では、chathub.server.sendMessage(id,msg) を呼び出す

、例えば最初のあなたは、クライアント側で各クライアントのIDを保存する必要がありますが

<a id='userid' class="username"></a> 
を言うことができます

とクリックイベントに、あなたはこれが完全な解決策ではないかもしれないが、あなたがしなければならない

$("a").on('click',function(){ 

    var touser = $(this).attr('id')) 
    } 

chathub.server.sendMeassage(touser,msg); 

のように、そのユーザーのidを得ることができます このような。

アイデアを示す良い投稿hereがあります。

+0

SendChatMessage()メソッドでは、クライアント側からパラメータとして "who"の代わりに渡すものを指定します。私は、 "who"がそのキーを持つConnectionIdを見つけるために使用される辞書(接続されたクライアントの詳細を含む辞書)のキーとして働いていると思います。 –

+0

チェックを編集するには、これを実行する必要があります要件。 – MUT

関連する問題