0

私のチャットアプリケーションプロジェクトでは、新しいユーザーがサーバーに接続するたびに、すべてのユーザーにユーザー名をブロードキャストしようとしています。ユーザーがサーバーを離れるたびにユーザー名を削除します。以下は私がチュートリアルを通して試したコードです。file.js(目的の出力が表示されていないファイルを確認してください)

Chat.cs作業中)->SignalRの「Hub」クラスを実装します

public class Chat : Hub 
{ 
    /* showing only related content */
    static ConcurrentDictionary<string, User> _users = new ConcurrentDictionary<string, User>();

    public override Task OnDisconnected()
    {            
        var user = _users[Context.ConnectionId]; //user as ConnectionId
        User removedUser; //new class object
        _users.TryRemove(Context.ConnectionId, out removedUser);
        return Clients.All.leave(user, DateTime.Now.ToString()); //dynamic expression
    }

    public void Joined()
    {
        User user = new User(Context.ConnectionId, Clients.Caller.username);
        _users.TryAdd(user.ConnectionID, user);
        Clients.All.joins(user.ConnectionID, user.Name, DateTime.Now); //dynamic expression
    }
}

User.cs作業中)

public class User
{
    public User(string ConnID, string Username)
    {
        Name = Username;
        ConnectionID = ConnID;
    }
    public string Name { get; set; }
    public string ConnectionID { get; set; }
}

file.js機能していません

var chatUsername = window.prompt("Enter Username:", "");  //username
var chat = $.connection.chat;  //connection
//
chat.client.joins = function (ConnectionId, name, Date) {
    ConnectionId = 1; /* given value to just test */
    name = chatUsername;
};

chat.client.leave = function (user, date) {
    user = "";  //making the string empty so that the disconnected user value will be lost.
};

//Here is the connection which calls the "Joined" function of the server (Chat.cs)

上記のように目的の結果が得られるように、file.js関数(結合および脱退)に何を書き込む必要がありますか。ここで質問する前に、私は同じことをしているが、含めたくない追加のjavascriptファイル(knockout.jsとjson)を含むこのサイトを調べました(bcos私はjqueryを初めて使用します)。

4

1 に答える 1

1

UserNamesをクライアントに渡すために、ディクショナリを取得し、結合されたサーバー側のメソッドで、SignalR行を次のように変更できます。

Clients.All.joins(_users.Values); //dynamic expression

その場合、結合のクライアントバージョンは次のようになります。

chat.client.joins = function (users) {
    for(var i = users.length - 1; i >= 0; i--) {
        alert("User Name: " + users[i].Name + "\nUser Connection ID: " + users[i].ConnectionID);
    }
};

もちろん、アラートとは異なる方法でユーザー情報を処理できますが、それがデータの処理方法の要点です。最後に、第三者が簡単に乗っ取る可能性があるため、接続IDをすべての人に渡すことはお勧めしません。

于 2012-12-11T17:53:41.897 に答える