2012-09-30 27 views
8

Tôi khá mới đối với SignalR. Nhiệm vụ đầu tiên của tôi là tạo ứng dụng trò chuyện đơn giản.Cách nhận danh sách khách hàng được kết nối trên SignalR

Tôi đã duyệt và đọc và cuối cùng đã tạo một trang mà bạn đến và trò chuyện và nó hoạt động tốt.

Bây giờ tôi cần hiển thị danh sách các khách hàng được kết nối. Để đạt được điều này tôi đã viết đoạn mã sau. Đây là HUB của tôi.

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


} 

Và thats it ... Now what ?? Tôi có đi đúng hướng không? Nếu, tôi sau đó làm thế nào để gọi phương pháp này từ xem? Một số gợi ý tốt sẽ thực sự giúp tôi. cổ vũ

EDIT:

Tôi đã thêm đoạn mã sau khi trung tâm bắt đầu

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

     }); 

Đây là phương pháp mà trả về tên khách hàng trong Hub tôi

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

        }).ToList(); 

     Clients.loadUsers(data); 
     return data; 
    } 

trong firebug tôi có thể thấy nó trả về một cái gì đó như sau;

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

Nhưng, làm cách nào tôi hiển thị trong chế độ xem của mình ??

EDIT:

này nhìn đầy đủ cho đến nay

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

Vấn đề: không nhìn thấy bất cứ điều gì ở đây:. $ ('# ClientList') html (data.Result [0] .Họ và tên); firebug nói 'dữ liệu không được định nghĩa'

Trả lời

6

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

Khi hub được bắt đầu chat sẽ có tất cả các chức năng công cộng của trung tâm bạn có sẵn như là chức năng javascript. Đây là những tín hiệu/hub tạo ra bằng cách sử dụng phương thức kết nối tốt nhất có sẵn giữa máy khách và máy chủ.

Ngược lại, trung tâm C# của bạn sẽ có quyền truy cập vào bất kỳ chức năng javascripts nào mà bạn thiết lập, ví dụ:

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

ps - bạn cũng có thể xem xét sử dụng OnConnectedAsync, mặc dù tất nhiên bạn vẫn có thể tiếp tục. Tôi cũng đang chờ hỗ trợ đầy đủ cho hỗ trợ trang trại bằng cách sử dụng sql, nằm trong số pipeline.

+0

Xin chào, Cảm ơn bạn đã trả lời. Tôi đã thử chính xác những gì bạn nói. Phương pháp điều khiển của tôi trả về '5' và tôi đã viết mã này để xem của tôi. $ .connection.hub.start (function() {connectedUserCount = chat.getConnectedUsersCount(); $ ('# clientList'). chắp thêm ('

  • ' + connectedUserCount + '
  • ');}) ;. . Nhưng nó trả lại một cái gì đó "[đối tượng Object]" ... Bất kỳ ý tưởng những gì có thể đi sai ?? – kandroid

    +0

    Tôi sẽ cập nhật câu trả lời cho một số điều đó ngay bây giờ – dove

    +0

    Đối tượng đó là danh sách của bạn.Xem cập nhật để trả lời và có thể chỉ cần thử và bắt đầu với việc gửi lại một poco đơn giản hoặc giá trị trở lại cho khách hàng cho người mới bắt đầu. Phải mất một chút để có được hang của cách này hoạt động. (ps - câu trả lời ban đầu của tôi có hai sai sót trong đó và có thể, vì tôi viết giả này, không chạy nó) – dove

    Các vấn đề liên quan