Cara mendapatkan daftar klien yang terhubung di SignalR

Saya cukup baru mengenal SignalR. Tugas pertama saya adalah membuat aplikasi chatting sederhana.

Saya telah menjelajah dan membaca dan akhirnya membuat halaman tempat Anda datang dan mengobrol dan berfungsi dengan baik.

Sekarang saya perlu menampilkan daftar klien yang terhubung. Untuk mencapai ini saya telah menulis kode berikut. Ini adalah HUB saya.

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


}

Dan itu saja...Sekarang bagaimana?? Apakah saya menuju ke arah yang benar? Jika, lalu bagaimana memanggil metode ini dari tampilan? Beberapa saran bagus akan sangat membantu saya. bersulang

EDIT:

Saya telah menambahkan skrip berikut ketika hub dimulai

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

        });

Ini adalah metode yang mengembalikan nama klien di Hub saya

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

                     }).ToList();

         Clients.loadUsers(data);
        return data;
    }

di pembakar saya dapat melihatnya mengembalikan sesuatu sebagai berikut;

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

Tapi, bagaimana saya menampilkannya dalam pandangan saya??

EDIT:

ini tampilan lengkap sejauh ini

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

Masalah: tidak melihat apa pun di sini: $('#clientList').html(data.Result[0].FullName); pembakar mengatakan 'data tidak ditentukan'


person Crime Master Gogo    schedule 30.09.2012    source sumber


Jawaban (1)


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

Setelah hub dimulai, obrolan akan membuat semua fungsi publik hub Anda tersedia sebagai fungsi javascript. Inilah yang dibuat oleh pemberi sinyal/hub menggunakan metode koneksi terbaik yang tersedia antara klien dan server.

Sebaliknya hub C# Anda akan memiliki akses ke fungsi javascript apa pun yang Anda siapkan, mis.

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

ps - Anda mungkin juga mempertimbangkan untuk menggunakan OnConnectedAsync, meskipun tentu saja Anda mungkin masih mempertahankannya. Saya juga menunggu dukungan penuh untuk dukungan web farm menggunakan sql, yang ada di pipeline .

person dove    schedule 30.09.2012
comment
Hai, Terima kasih atas jawabannya. Saya telah mencoba persis seperti yang Anda katakan. Metode Pengontrol saya mengembalikan '5' dan saya menulis kode ini ke tampilan saya. $.connection.hub.start(function () {connectedUserCount = chat.getConnectedUsersCount();$('#clientList').append('‹li›' + connectUserCount + '‹/li›');});. . Tapi itu mengembalikan sesuatu [objek Objek]...Tahu apa yang salah?? - person Crime Master Gogo; 30.09.2012
comment
Objek itu adalah daftar Anda. Lihat pembaruan untuk menjawab dan mungkin coba mulai dengan mengirimkan kembali poco atau nilai sederhana ke klien sebagai permulaan. Dibutuhkan sedikit waktu untuk memahami cara kerjanya. (ps - jawaban asli saya memiliki dua kekurangan dan mungkin belum, karena saya menulis ini semu, tidak menjalankannya) - person dove; 30.09.2012
comment
harapan yang mulai masuk akal, akan terlihat lagi di pagi hari. - person dove; 30.09.2012
comment
hai..terima kasih atas bantuannya..saya akan segera mencobanya dan menghubungi Anda kembali mengenai apa yang terjadi.. - person Crime Master Gogo; 01.10.2012
comment
hai.edit pertanyaannya, tambahkan beberapa kode tambahan yang saya tulis akhir-akhir ini. tapi tetap tidak bisa melewatinya. :( - person Crime Master Gogo; 01.10.2012
comment
mari kita melanjutkan diskusi ini di chat - person dove; 01.10.2012