C#信号2从服务器接收在线用户列表

C#信号2从服务器接收在线用户列表,c#,list,signalr,C#,List,Signalr,我已经用SignalR2创建了一个聊天室。客户端和服务器本身工作正常。现在,我正在尝试实现一个“用户在线”功能。服务器代码似乎是正确的,但我正在努力让客户端接收服务器推送回客户端的数据 这是下面的服务器代码: public static List<string> Users = new List<string>(); public void Send(string name, string message) { // Call the b

我已经用SignalR2创建了一个聊天室。客户端和服务器本身工作正常。现在,我正在尝试实现一个“用户在线”功能。服务器代码似乎是正确的,但我正在努力让客户端接收服务器推送回客户端的数据

这是下面的服务器代码:

 public static List<string> Users = new List<string>();
    public void Send(string name, string message)
    {
        // Call the broadcastMessage method to update clients.
        Clients.All.broadcastMessage(name, message);
        Clients.All.addMessage(name, message);
    }

    public void SendUserList(List<string> users)
    {
        var context = GlobalHost.ConnectionManager.GetHubContext<chatHub>();
        context.Clients.All.updateUserList(users);
    }

    public override Task OnConnected()
    {
        string clientId = GetClientId();
        //if (Users.IndexOf(clientId) == -1)
        //{
            Users.Add(clientId);
        //}

        SendCount(Users.Count);
        return base.OnConnected();
    }

    public override Task OnDisconnected(bool stopCalled)
    {
        System.Diagnostics.Debug.WriteLine("Disconnected");

        SendCount(Users.Count);
        return base.OnDisconnected(stopCalled);
    }

    private string GetClientId()
    {
        string clientId = "";
        if (Context.QueryString["clientId"] != null)
        {
            // clientId passed from application 
            clientId = this.Context.QueryString["clientId"];
        }

        if (string.IsNullOrEmpty(clientId.Trim()))
        {
            clientId = Context.ConnectionId;
        }

        return clientId;
    }

    public void SendCount(int count)
    {
        // Call the addNewMessageToPage method to update clients.
        var context = GlobalHost.ConnectionManager.GetHubContext<chatHub>();
        context.Clients.All.updateUsersOnlineCount(count);
    }
public static async void ConnectAsync(RadChat ChatInternal)
    {
        ChatInternal.Author = new Author(null, Varribles.Agent);

        var querystringData = new Dictionary<string, string>();
        querystringData.Add("clientId", Varribles.Agent);

        Connection = new HubConnection(ServerURI, querystringData);
        HubProxy = Connection.CreateHubProxy("chatHub");


        //Handle incoming event from server: use Invoke to write to console from SignalR's thread
        HubProxy.On<string, string>("AddMessage", (name, message) =>
            ChatInternal.Invoke((Action)(() =>
         Backend.GET.Messages(ChatInternal)
            )));



        try
        {
            await Connection.Start();


            Backend.GET.Messages(ChatInternal);
        }
        catch (System.Net.Http.HttpRequestException)
        {
            //No connection: Don't enable Send button or show chat UI
            return;
        }
    }
公共静态列表用户=新列表();
公共无效发送(字符串名称、字符串消息)
{
//调用broadcastMessage方法来更新客户端。
Clients.All.broadcastMessage(名称、消息);
Clients.All.addMessage(名称、消息);
}
public void SendUserList(列出用户)
{
var context=GlobalHost.ConnectionManager.GetHubContext();
context.Clients.All.updateUserList(用户);
}
已连接的公用覆盖任务()
{
字符串clientId=GetClientId();
//if(Users.IndexOf(clientId)=-1)
//{
Users.Add(clientId);
//}
SendCount(Users.Count);
返回base.OnConnected();
}
公共覆盖任务OnDisconnected(bool stopCalled)
{
系统诊断调试写线(“断开”);
SendCount(Users.Count);
返回基.OnDisconnected(stopCalled);
}
私有字符串GetClientId()
{
字符串clientId=“”;
if(Context.QueryString[“clientId”!=null)
{
//从应用程序传递的clientId
clientId=this.Context.QueryString[“clientId”];
}
if(string.IsNullOrEmpty(clientId.Trim()))
{
clientId=Context.ConnectionId;
}
返回客户ID;
}
公共无效发送计数(整数计数)
{
//调用addNewMessageToPage方法来更新客户端。
var context=GlobalHost.ConnectionManager.GetHubContext();
context.Clients.All.updateUsersOnlineCount(count);
}
下面是连接/接收消息的客户端代码:

 public static List<string> Users = new List<string>();
    public void Send(string name, string message)
    {
        // Call the broadcastMessage method to update clients.
        Clients.All.broadcastMessage(name, message);
        Clients.All.addMessage(name, message);
    }

    public void SendUserList(List<string> users)
    {
        var context = GlobalHost.ConnectionManager.GetHubContext<chatHub>();
        context.Clients.All.updateUserList(users);
    }

    public override Task OnConnected()
    {
        string clientId = GetClientId();
        //if (Users.IndexOf(clientId) == -1)
        //{
            Users.Add(clientId);
        //}

        SendCount(Users.Count);
        return base.OnConnected();
    }

    public override Task OnDisconnected(bool stopCalled)
    {
        System.Diagnostics.Debug.WriteLine("Disconnected");

        SendCount(Users.Count);
        return base.OnDisconnected(stopCalled);
    }

    private string GetClientId()
    {
        string clientId = "";
        if (Context.QueryString["clientId"] != null)
        {
            // clientId passed from application 
            clientId = this.Context.QueryString["clientId"];
        }

        if (string.IsNullOrEmpty(clientId.Trim()))
        {
            clientId = Context.ConnectionId;
        }

        return clientId;
    }

    public void SendCount(int count)
    {
        // Call the addNewMessageToPage method to update clients.
        var context = GlobalHost.ConnectionManager.GetHubContext<chatHub>();
        context.Clients.All.updateUsersOnlineCount(count);
    }
public static async void ConnectAsync(RadChat ChatInternal)
    {
        ChatInternal.Author = new Author(null, Varribles.Agent);

        var querystringData = new Dictionary<string, string>();
        querystringData.Add("clientId", Varribles.Agent);

        Connection = new HubConnection(ServerURI, querystringData);
        HubProxy = Connection.CreateHubProxy("chatHub");


        //Handle incoming event from server: use Invoke to write to console from SignalR's thread
        HubProxy.On<string, string>("AddMessage", (name, message) =>
            ChatInternal.Invoke((Action)(() =>
         Backend.GET.Messages(ChatInternal)
            )));



        try
        {
            await Connection.Start();


            Backend.GET.Messages(ChatInternal);
        }
        catch (System.Net.Http.HttpRequestException)
        {
            //No connection: Don't enable Send button or show chat UI
            return;
        }
    }
public static async void ConnectAsync(RadChat ChatInternal)
{
ChatInternal.Author=新作者(null,Varribles.Agent);
var querystringData=new Dictionary();
querystringData.Add(“clientId”,Varribles.Agent);
连接=新的HUB连接(ServerURI、querystringData);
HubProxy=Connection.CreateHubProxy(“chatHub”);
//处理来自服务器的传入事件:使用Invoke从信号器的线程写入控制台
HubProxy.On(“AddMessage”,(名称、消息)=>
ChatInternal.Invoke((操作)(()=>
Backend.GET.Messages(ChatInternal)
)));
尝试
{
等待连接。开始();
Backend.GET.Messages(ChatInternal);
}
catch(System.Net.Http.HttpRequestException)
{
//无连接:不启用发送按钮或显示聊天界面
返回;
}
}
现在,我的问题是,如何从服务器检索“用户”列表

提前谢谢