【问题标题】:Function to add and remove a username添加和删​​除用户名的功能
【发布时间】:2012-12-11 05:43:54
【问题描述】:

在我的聊天应用程序项目中,每当有新用户连接到服务器时,我都会尝试向所有用户广播用户名。并在用户离开服务器时删除用户名。以下是我通过教程尝试过的代码。 (请检查未显示所需输出的file.js 文件)

Chat.cs (Working) --> 实现 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 函数(joinsleave)中写什么,这样我才能得到如上所述的预期结果。在问这里之前,我已经浏览了这个 site,它正在做同样的事情,但包括我不想包含的其他 javascript 文件(knockout.js 和 json)。(因为我是 jquery 的新手)。

【问题讨论】:

  • 到底是什么问题?
  • @N.TaylorMullen 我正在尝试在 js 文件中编写函数 joinsleave。我写的功能不起作用。我的意思是,用户名在页面上不可见。如果我仍然不清楚,请查看我的 js 文件代码 here
  • 如果你在加入/离开函数中通过 alert("foo"),它们应该被触发。所有代码看起来都正确。
  • @N.TaylorMullen 是的,alert 正在工作.. 但我不知道为什么我编写的代码没有在 div #showUsername 中显示连接的用户用户名。我想我应该使用User类来存储来自js文件变量chatUsername的用户名(我不知道该怎么做)
  • 调试您的代码并查看您传递给每个函数的内容。使用该信息来确定您要显示的内容。

标签: javascript jquery asp.net signalr


【解决方案1】:

为了将用户名传递给客户端,您可以使用您的字典,并在您加入的服务器端方法中,您可以将 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 传递给所有人,因为这样第三方很容易劫持它。

【讨论】:

  • 我之前在different manner 中问过同样的问题。当时我很迷茫。。现在我意识到我的错误了。谢谢和抱歉:)。
猜你喜欢
  • 2020-06-27
  • 1970-01-01
  • 1970-01-01
  • 2015-07-29
  • 1970-01-01
  • 2013-05-16
  • 2023-04-07
  • 1970-01-01
  • 2019-01-07
相关资源
最近更新 更多