2012-09-30 22 views
8

Oldukça yeni. İlk görevim basit bir sohbet uygulaması yapmaktır.Bağlantılı istemcilerin bir listesini nasıl alırsınız? SignalR

Tarama ve okuma yaptım ve nihayet gelip sohbet ettiğiniz bir sayfa oluşturduk ve iyi çalışıyor.

Şimdi bağlı istemcilerin listesini göstermem gerekiyor. Bunu başarmak için aşağıdaki kodu yazdım. Bu benim HUB'ım.

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; 
    } 


} 

Ve işte bu ... Şimdi ne? Doğru yöne gidiyorum? Öyleyse, bu yöntemleri bu görünümden nasıl ararım? Bazı iyi öneriler gerçekten bana yardımcı olacaktır. şerefe

DÜZENLEME: göbek Bu benim Hub istemci adlarını döndürür yöntemdir

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

     }); 

başlattığınızda aşağıdaki senaryoyu eklemiş

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

        }).ToList(); 

     Clients.loadUsers(data); 
     return data; 
    } 

Firebug'da görebiliyorum ki bir şey şu şekilde döndürür;

{"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} 

Ancak, bunu nasıl görüntüleyebilirim?

DÜZENLEME:

bu tam görünüm şimdiye kadar

<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> 

Sorun: burada bir şey görmüyorum. $ ('# ClientList') html (data.Result [0] .Ad Soyad); firebug

cevap

6

JavaScript göbek sohbetler JavaScript fonksiyonları olarak kullanılabilir senin göbek kamu görevleri olurdu başladıktan sonra

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; 
} 

'veri tanımlı değil' diyor. Bu, signalr/hub'ların istemci ve sunucu arasında en uygun bağlantı yöntemini kullanarak oluşturduğu şeydir.

Tersine C# hub'ınız, ayarladığınız herhangi bir javascripts işlevine, örn.

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

ps - tabii yine de bu devam olabilir olsa da, OnConnectedAsync kullanmayı düşünebilirsiniz. Ben de pipeline olan sql kullanarak web grubu desteği için tam destek bekliyorum.

+0

Merhaba, Cevabınız için teşekkürler. Tam olarak ne söylediğini denedim. Denetleyici yöntemim '5' i döndürür ve bu kodu benim görüşüme yazdım. $ .connection.hub.start (function() {connectedUserCount = chat.getConnectedUsersCount(); $ ('# clientList'). ekleyin ('

  • ' + connectedUserCount + '
  • ');}); . Ama "nesne nesnesi" gibi bir şey döndürür ... Herhangi bir fikir neyin yanlış gidebilir? – kandroid

    +0

    Bazılarının cevabını şimdi güncelleyeceğim – dove

    +0

    Bu nesne listenizdir.Cevaplamak için güncellemeye bakın ve belki de sadece başlangıçlar için müşteriye basit bir poco veya değer geri göndermeyi deneyin. Bu, çalışma şeklinin asılmasını sağlamak için biraz zaman alır. (ps - orjinal cevabımda iki kusur vardı ve belki de, bunu yazarken, bunu çalıştırmama rağmen) – dove

    İlgili konular