วิธีรับรายชื่อไคลเอนต์ที่เชื่อมต่อบน SignalR

ฉันค่อนข้างใหม่กับ SignalR งานแรกของฉันคือสร้างแอปแชทง่ายๆ

ฉันได้เรียกดูและอ่านและในที่สุดก็สร้างเพจที่คุณมาแชทและมันก็ใช้ได้ดี

ตอนนี้ฉันต้องแสดงรายการไคลเอนต์ที่เชื่อมต่อ เพื่อให้บรรลุเป้าหมายนี้ ฉันได้เขียนโค้ดต่อไปนี้ นี่คือฮับของฉัน

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

ใน firebug ฉันเห็นว่ามันคืนค่าดังนี้

{"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); firebug บอกว่า 'ข้อมูลไม่ได้ถูกกำหนดไว้'


person Crime Master Gogo    schedule 30.09.2012    source แหล่งที่มา


คำตอบ (1)


จาวาสคริปต์

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

เมื่อฮับเริ่มต้นขึ้น การแชทจะมีฟังก์ชันสาธารณะทั้งหมดของฮับของคุณพร้อมใช้งานเป็นฟังก์ชันจาวาสคริปต์ นี่คือสิ่งที่ผู้ส่งสัญญาณ/ฮับสร้างขึ้นโดยใช้วิธีการเชื่อมต่อที่ดีที่สุดระหว่างไคลเอนต์และเซิร์ฟเวอร์

ในทางกลับกัน ฮับ C# ของคุณจะสามารถเข้าถึงฟังก์ชันจาวาสคริปต์ที่คุณตั้งค่าไว้ เช่น

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

ปล - คุณอาจพิจารณาใช้ OnConnectedAsync แต่แน่นอนว่าคุณอาจยังคงใช้สิ่งเหล่านี้อยู่ ฉันยังรอการสนับสนุนฟาร์มเว็บอย่างเต็มรูปแบบโดยใช้ sql ซึ่งอยู่ในไปป์ไลน์ .

person dove    schedule 30.09.2012
comment
สวัสดี ขอบคุณสำหรับการตอบกลับ ฉันได้ลองสิ่งที่คุณพูดแล้ว วิธีการควบคุมของฉันส่งคืน '5' และฉันเขียนโค้ดนี้ในมุมมองของฉัน $.connection.hub.start(function () {connectedUserCount = chat.getConnectedUsersCount();$('#clientList').append('‹li›' + เชื่อมต่อ UserCount + '‹/li›');}); . แต่มันส่งคืนบางสิ่ง [object Object]...มีความคิดอะไรบ้างที่อาจผิดพลาด ?? - person Crime Master Gogo; 30.09.2012
comment
วัตถุนั้นคือรายการของคุณ ดูการอัปเดตเพื่อตอบและอาจลองเริ่มต้นด้วยการส่ง poco หรือมูลค่าง่ายๆ กลับไปยังไคลเอนต์เพื่อเริ่มต้น ต้องใช้เวลาสักหน่อยจึงจะเข้าใจวิธีการทำงานนี้ (ปล. - คำตอบเดิมของฉันมีข้อบกพร่องสองประการและอาจถึงขั้นที่ฉันกำลังเขียนสิ่งนี้หลอกไม่ได้ใช้งาน) - person dove; 30.09.2012
comment
หวังว่าเริ่มจะเข้าท่า เช้าๆ จะกลับมาดูใหม่ - person dove; 30.09.2012
comment
สวัสดี..ขอบคุณสำหรับความช่วยเหลือ..ฉันจะลองสิ่งเหล่านั้นเร็วๆ นี้แล้วติดต่อกลับเพื่อแจ้งสิ่งที่เกิดขึ้น.. - person Crime Master Gogo; 01.10.2012
comment
สวัสดี แก้ไขคำถามแล้ว เพิ่มโค้ดพิเศษบางอย่างที่ฉันเขียนเมื่อเร็วๆ นี้ แต่ยังผ่านไม่ได้ :( - person Crime Master Gogo; 01.10.2012
comment
ให้เรา สนทนาต่อในการแชท - person dove; 01.10.2012