Dmi*_*lov 6 c# azure xamarin.ios asp.net-core azure-signalr
我正在尝试实现 Azure SignalR 服务,以促进桌面、asp.net-core 和 xamarin.ios 应用程序之间的两种方式的消息传递。
我已经Hub
按照微软的文档在这里创建了一个:https :
//docs.microsoft.com/en-us/aspnet/core/signalr/hubs?view=aspnetcore-2.2
中心:
public class ChatHub : Hub
{
public Task SendMessage(string user, string message)
{
return Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
Run Code Online (Sandbox Code Playgroud)
当用户连接到集线器时,我将用户的连接添加到组中,如下所示:https : //docs.microsoft.com/en-us/aspnet/core/signalr/groups?view=aspnetcore-2.2
添加到组:
public async Task AddToGroup(string groupName)
{
await Groups.AddToGroupAsync(Context.ConnectionId, groupName);
await Clients.Group(groupName).SendAsync("Send", $"{Context.ConnectionId} has joined the group {groupName}.");
}
public async Task RemoveFromGroup(string groupName)
{
await Groups.RemoveFromGroupAsync(Context.ConnectionId, groupName);
await Clients.Group(groupName).SendAsync("Send", $"{Context.ConnectionId} has left the group {groupName}.");
}
Run Code Online (Sandbox Code Playgroud)
发送消息时,它有一个组名作为参数,我想在将消息发送到任何注册客户端之前检查提供的组是否有任何连接,如果没有连接,我想发送推送通知(已经有推送通知的工作代码)
发送带有通知回退的消息:
public class ChatHub : Hub
{
public Task SendMessage(string groupName, string user, string message)
{
var group = Clients.Group(groupName);
// todo: how to check if we have any open connections in this group?
if(group.Conections.Count > 0)
{
return group.SendAsync("ReceiveMessage", user, message);
}
else
{
// todo: run code to send push notification or anything else you might want to do
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题:我没有看到任何方法可以通过可用的 api 检查组中当前的连接数(如果我错了,请纠正我)
我看到该组Microsoft.AspNetCore.SignalR.Internal.GroupProxy<ChatHub>
在运行时返回,没有公共方法。内部私有变量确实包括_groupName
并且_lifeTimeManager
在生命周期管理器中有一个_clientConnectionManager
我可以看到它们在连接时有客户端连接但我无法访问其中任何一个,我正在使用Microsoft.Azure.SignalR
(1.0.4) Nuget 包。有谁知道我想用这个 SDK 做什么,如果可以,我该怎么做?
归档时间: |
|
查看次数: |
1042 次 |
最近记录: |