C#信号2从服务器接收在线用户列表
我已经用SignalR2创建了一个聊天室。客户端和服务器本身工作正常。现在,我正在尝试实现一个“用户在线”功能。服务器代码似乎是正确的,但我正在努力让客户端接收服务器推送回客户端的数据 这是下面的服务器代码: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
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)
{
//无连接:不启用发送按钮或显示聊天界面
返回;
}
}
现在,我的问题是,如何从服务器检索“用户”列表
提前谢谢