Wie man eine Liste der verbundenen clients auf SignalR
Ich bin ganz neu mit SignalR.
Meine erste Aufgabe ist es, einfache chat-app.
Ich war surfen und zu Lesen, und schließlich eine Seite, wo Sie kommen und chat und es funktioniert gut.
Nun brauche ich, um eine Liste der verbundenen clients. Um dies zu erreichen habe ich schrieb Sie den folgenden code.
Dies ist meine NABE.
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;
}
}
Und das Wars...was Nun???
Bin ich denn die richtige Richtung? Wenn, bin ich dann zum Aufruf dieser Methoden vom view?
Einige gute Vorschläge, die wirklich helfen, mich aus.
cheers
EDIT:
Ich habe den folgenden script, wenn sich der hub beginnen
$.connection.hub.start(function () {
chat.getConnectedUsers();
});
Dies ist die Methode, gibt die client-Namen in meinem Hub
public List<ClientModel> GetConnectedUsers()
{
var data = (from k in dc.Users
select new ClientModel()
{
FullName = k.UserName
}).ToList();
Clients.loadUsers(data);
return data;
}
in firebug sehe ich, dass es etwas zurückgibt, wie folgt;
{"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}
Aber wie würde ich zeigen, dass meiner Ansicht??
EDIT:
diese Weise wird die gesamte Ansicht so weit
<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>
Problem: nichts sehen hier: $('#clientList').html(data.Ergebnis[0].FullName);
firebug sagt 'data ist nicht definiert'
Du musst angemeldet sein, um einen Kommentar abzugeben.
JavaScript
Einmal hub gestartet chats hätte allen öffentlichen Funktionen Ihres Hubs zur Verfügung, die als javascript-Funktionen. Dies ist, was die signalr/hubs erstellt unter Verwendung der besten verfügbaren Verbindung Methode, die zwischen client und server.
In umgekehrter Ihrem C# - hub haben Sie Zugriff auf alle javascript-Funktionen, die Sie einrichten, z.B.
ps - Sie sollten auch mit OnConnectedAsync, obwohl natürlich könnten Sie weiterhin diese. Ich bin auch warten, für eine vollständige Unterstützung für web-farm-Unterstützung unter Verwendung von sql, die in der pipeline.