gpt4 book ai didi

javascript - 如何在 SignalR 上获取已连接客户端的列表

转载 作者:数据小太阳 更新时间:2023-10-29 04:14:00 24 4
gpt4 key购买 nike

我对 SignalR 很陌生。我的第一个任务是制作简单的聊天应用。

我一直在浏览和阅读,最后制作了一个您可以聊天的页面,它运行良好。

现在我需要显示已连接客户端的列表。为此,我编写了以下代码。这是我的 HUB。

public class ChatHub: Hub
{

chatEntities dc = new chatEntities();
public void Send(string message,string clientName)
{
Clients.addMessage(message,clientName);

}

// I want to save the user into my database, when they join
public void Joined(string userId,string userName)
{

CurrentChattingUsers cu = new CurrentChattingUsers();
cu.ConnectionId = userId;
cu.UserName = userName;

dc.CurrentChattingUsers.AddObject(cu);
dc.SaveChanges();


Clients.joins(userId, userName);
}

// This will return a list of connected user from my db table.
public List<ClientModel> GetConnectedUsers()
{
var query = (from k in dc.CurrentChattingUsers
select new ClientModel()
{
FullName = k.UserName,
UserId = k.ConnectionId
}).ToList();
return query;
}


}

就是这样......现在怎么办?我会朝着正确的方向前进吗?如果,我又如何从 View 中调用这个方法呢?一些好的建议将真正帮助我。干杯

编辑:

我在集线器启动时添加了以下脚本

$.connection.hub.start(function () {
chat.getConnectedUsers();

});

这是在我的 Hub 中返回客户端名称的方法

  public List<ClientModel> GetConnectedUsers()
{
var data = (from k in dc.Users
select new ClientModel()
{
FullName = k.UserName

}).ToList();

Clients.loadUsers(data);
return data;
}

在 Firebug 中,我可以看到它返回如下内容;

{"State":{},"Result":[{"FullName":"mokarom","UserId":null},  {"FullName":"aka8000","UserId":null},{"FullName":"johnnyno5","UserId":null},{"FullName":"reza","UserId":null},{"FullName":"amyo","UserId":null},{"FullName":"rezatech","UserId":null}],"Id":"0","Error":null,"StackTrace":null}

但是,我该如何在我的 View 中显示它?

编辑:

这是到目前为止的完整 View

<script type="text/javascript">
var chat;
var myClientName
$(document).ready(function(){

myClientName = '@Request.Cookies["ChatterName"].Value';


// Created proxy
chat = $.connection.chatHub;
// Assign a function to be called by the server
chat.addMessage = onAddMessage;

// Register a function with the button click
$("#broadcast").click(onBroadcast);


$('#message').keydown(function (e) {
if (e.which == 13) { //Enter
e.preventDefault();

onBroadcast();

}
});

// Start the connection
$.connection.hub.start(function () {
chat.getConnectedUsers();

});

chat.loadUsers = function (data) {
loadUsers(data);

};
});


function onAddMessage(message,clientName) {
// Add the message to the list
$('#messages').append('<div class="chatterName">' + clientName + ' </div><div class="chatterMessage"> ' + message + '</div><div class="clear">');

}
function onBroadcast() {
// Call the chat method on the server
chat.send($('#message').val(), myClientName);
$('#message').val('');
}
function loadUsers(data) {
$('#clientList').html(data.Result[0].FullName);

}
</script>

问题:在这里看不到任何东西:$('#clientList').html(data.Result[0].FullName);firebug 说“数据未定义”

最佳答案

JavaScript

var chats = $.connection.chatHub;
chats.loadUsers = function (data) { loadUsers(data); };
var connectedUserCount = 0;

$.connection.hub.start(function ()
{ chats.getConnectedUsers(); });

function loadUsers = = function (data) {
console.log(data); //so you can see your data in firebug.etc
//which signal r will have converted to json so you could try
var numberOfUsers = data.length;
}

一旦 hub 启动,聊天就会将 hub 的所有公共(public)功能用作 javascript 函数。这是信号器/集线器使用客户端和服务器之间可用的最佳连接方法创建的。

相反,您的 C# 集线器将有权访问您设置的任何 javascripts 函数,例如

Clients.loadUsers(query);  
//add this to you server side just before you return query

ps - 你也可以考虑使用 OnConnectedAsync ,当然你可能仍然坚持这些。我也在等待对使用 sql 的网络场支持的全面支持,它在 pipeline 中.

关于javascript - 如何在 SignalR 上获取已连接客户端的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12660313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com