2017-03-03 1 views
1

私は、オペレータがプライベートチャットのためにクライアント要求を受け入れたときに問題に直面しているasp.netのasp.netでsignalrを使用してチャットアプリケーションを開発しています。受け入れ事業者以外の事業者のために表示され、私はこの問題を解決するために苦労していますsignalrを使用してユーザリスト内のユーザを非表示にする

私はハブクラスで書かれているコードは、私が

static List<UserDetail> ConnectedUsers = new List<UserDetail>(); 

としてConnectedUsersを宣言して使用してユーザーを追加した

です

ConnectedUsers.Add(new UserDetail { ConnectionId = id, UserName = userName }); 

chatHub.server.remove(userId, userName); 

を次のように私はhtmlページからこのコードを呼び出していますが、このアプローチからユーザーを削除するか、隠していません

public void Remove(string UserId, string User) 
    { 
     UserDetail item = new UserDetail(); 
     item.ConnectionId = UserId; 
     item.UserName = User; 
     if (item != null) 
     { 
      ConnectedUsers.Remove(item); 
     } 
    } 

を使用してプライベートチャットユーザーを削除しようとしましたユーザーリスト

+0

'ConnectedUsers'に' item'を追加したことがないので、あなたのコードは動作しません。これはあなたが作成したばかりのオブジェクトです。 接続しているユーザーを管理するコードを追加してください。特に保管場所 – Marco

+0

質問を編集してこの情報を追加してください。それが編集機能のためのものです。 – Marco

答えて

0

UserDetailクラスを編集してプロパティ01を追加します:彼は接続したときに、デフォルトパー

public class UserDetail { 
    //Guid or string? edit accordingly 
    public string ConnectionId { get; set;} 
    public string UserName { get; set; } 
    public bool IsAvailable { get; set; } 
} 

、各ユーザーは、真実であることを彼の "IsAvailable" を必要とします。 彼らはプライベートチャットを受け入れ、その特定のConnectionIdのために、falseにIsAvailableを設定し、サーバーに通知を送信:

も意味
//you don't really need the user name, id is sufficient 
public void Remove(string UserId, string User) { 
    var user = ConnectedUsers.FirstOrDefault(x => x.ConnectionId == UserId); 
    if(user != null) { 
     user.IsAvailable = false; 
    } 
} 

、あなただけ戻って接続しているユーザーのリストを返すことができません。しかし、最初にフィルタリングする必要があります。したがって、接続したクライアントにそのリストをプッシュする場合は、where句ConnectedUsers.Where(x => x.IsAvailable)を追加します。

これは、接続されたクライアント上のすべての利用不可能なユーザーを非表示にする必要があります。

関連する問題