【发布时间】:2015-05-20 22:35:07
【问题描述】:
我今天一直在尝试 SignalR,它真的很简洁。基本上我想要实现的目标如下:
一旦设备连接,它应该向第一个设备发送消息。如果连接的设备多于 1 个,我想发送两条消息。一对所有除了最后连接的客户端。并且向仅最后连接的客户端发送一条消息。
当我将它放在自定义 API 控制器中并基本上调用操作时,我一直使用的代码完美运行,但这不是我想要的。
我想在没有任何用户交互的情况下在OnConnected 内连接设备后立即发送消息,但是当我将代码放入OnConnected 覆盖时,它会停止工作。它不再发送到特定的客户端(第一次连接和最后一次连接)。
我希望有人能够帮助我解决这个问题,因为我已经敲了几个小时的头了。
public override System.Threading.Tasks.Task OnConnected()
{
UserHandler.ConnectedIds.Add(Context.ConnectionId, UserHandler.ConnectedIds.Count + 1);
int amountOfConnections = UserHandler.ConnectedIds.Count;
var lastConnection = UserHandler.ConnectedIds.OrderBy(x => x.Value).LastOrDefault();
var allExceptLast = UserHandler.ConnectedIds.Take(amountOfConnections - 1).Select(x => x.Key).ToList();
if (amountOfConnections == 1)
{
Clients.Client(UserHandler.ConnectedIds.First().Key).hello("Send to only(also first) one");
}
else
{
Clients.Clients(allExceptLast).hello("Send to everyone except last");
Clients.Client(lastConnection.Key).hello("Send to only the last one");
}
return base.OnConnected();
}
【问题讨论】:
标签: c# asp.net signalr signalr-hub signalr.client