Sono abbastanza nuovo per SignalR. Il mio primo compito è quello di creare una semplice app di chat.Come ottenere un elenco di client connessi su SignalR
Ho navigato e letto e finalmente ho creato una pagina in cui vieni a chattare e funziona bene.
Ora ho bisogno di mostrare un elenco di client collegati. Per raggiungere questo obiettivo ho scritto il seguente codice. Questo è il mio 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;
}
}
E questo è tutto ... Ora che cosa ?? Sto andando nella giusta direzione? Se, sono allora come chiamare questo metodo dalla visualizzazione? Alcuni buoni suggerimenti mi aiuteranno davvero. applausi
EDIT:
ho aggiunto il seguente script quando si avvia l'hub
$.connection.hub.start(function() {
chat.getConnectedUsers();
});
Questo è il metodo che restituisce i nomi dei clienti nel mio 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 posso vederlo restituisce qualcosa come segue;
{"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}
Ma come visualizzarlo a mio avviso ??
EDIT:
questa la visione completa finora
<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>
Problema: non si vede nulla qui:. $ ('# ClientList') html (data.Result [0] .Nome e cognome); Firebug dice 'i dati non è definito'
Ciao, grazie per la risposta. Ho provato esattamente quello che hai detto. Il mio metodo di controllo restituisce "5" e ho scritto questo codice a mio avviso. $ .connection.hub.start (function() {connectedUserCount = chat.getConnectedUsersCount(); $ ('# clientList'). append ('
Aggiornerò la risposta per alcuni di questo ora – dove
Questo oggetto è la tua lista.Guarda l'aggiornamento per rispondere e forse prova a iniziare con l'invio di un semplice poco o valore al client per i principianti. Ci vuole un po 'per capire come funziona. (ps - la mia risposta originale aveva due difetti e potrebbe ancora, dato che sono pseudo scriverlo, non farlo funzionare) – dove