如何获得SignalR连接的客户端列表(How to get a list of connected

2019-08-01 01:55发布

我很新的SignalR。 我的第一项任务是使简单的聊天应用程序。

我一直在浏览和阅读并最终做出哪儿来聊一个页面,它工作正常。

现在我需要显示连接的客户端列表。 为了实现这一点,我已经写了下面的代码。 这是我的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;
    }   


}

并且那它...现在是什么? 我该怎么正确的方向? 如果,我是那么如何调用来自鉴于这种方法? 一些好的建议将真正帮助我。 干杯

编辑:

我已经添加下面的脚本当轮毂启动

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

        });

这是在我的集线器返回客户端名称的方法

  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>

问题:什么也没看到这里:$( '#客户端列表')HTML(data.Result [0] .FullName); 萤火说,“数据没有定义”

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

一旦枢纽开始聊天会对你的集线器可作为JavaScript函数所有的公共职能。 这就是signalr /集线器创建使用客户端和服务器之间最好的连接方法。

在反向的C#枢纽将有机会获得任何JavaScript的功能,你的设置,例如,

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

PS -你也可以考虑使用OnConnectedAsync ,不过当然你仍然可能会持续这些。 我使用的是SQL,这是在还等全面支持Web场支持管道 。



文章来源: How to get a list of connected clients on SignalR