[英]How to get a list of connected clients on 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();
});
這是在我的Hub中返回客戶端名稱的方法
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>
問題:這里看不到任何內容:$('#clientList')。html(data.Result [0] .FullName); 螢火蟲說“數據沒有定義”
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;
}
啟動集線器后,聊天會將集線器的所有公共功能作為javascript函數提供。 這是信號器/集線器使用客戶端和服務器之間最佳可用連接方法創建的內容。
反過來,您的C#中心可以訪問您設置的任何javascripts函數,例如
Clients.loadUsers(query);
//add this to you server side just before you return query
ps - 你也可以考慮使用OnConnectedAsync ,當然你可能仍然堅持這些。 我使用的是SQL,這是在還等全面支持Web場支持管道 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.