我对SignalR很陌生。 我的第一项任务是制作简单的聊天应用程序。如何获取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;
}
}
而那就是它......现在呢? 我该走向正确的方向吗?如果,那我怎么从视图中调用这个方法呢? 一些很好的建议将真正帮助我。 欢呼
编辑:
我已经添加下面的脚本当轮毂启动
$.connection.hub.start(function() {
chat.getConnectedUsers();
});
这是在我的集线器返回客户端名称的方法
public List<ClientModel> GetConnectedUsers()
{
var data = (from k in dc.Users
select new ClientModel()
{
FullName = k.UserName
}).ToList();
Clients.loadUsers(data);
return data;
}
在萤火虫我可以看到它返回的东西如下;
{"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}
但是,我怎么会显示,在我看来??
编辑:
这个完整的视图,到目前为止
<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>
问题:什么也没看到这里:$( '#客户端列表')HTML(data.Result [0] 。全名); 萤火说,“数据没有定义”
嗨,谢谢你的回复。我已经尝试了你说的话。我的控制器方法返回'5',并且我将这段代码写入了我的视图。 $ .connection.hub.start(function(){connectedUserCount = chat.getConnectedUsersCount(); $('#clientList')。append('
我会更新一些现在的答案 – dove
该对象是您的列表。请参阅更新以回答问题,也许只是尝试开始将简单的poco或价值返回给客户端以供初学者使用。获得这种工作方式的麻烦确实需要一点点。 (ps - 我原来的答案有两个缺陷,可能还有,因为我伪造了这个,没有运行) – dove