gpt4 book ai didi

c# - SignalR - 发送消息 OnConnected

转载 作者:太空狗 更新时间:2023-10-29 18:08:13 25 4
gpt4 key购买 nike

我今天一直在试验 SignalR,它真的很简洁。基本上我想要实现的是:

一旦设备连接上,它就应该向第一个设备发送一条消息。如果连接的设备多于 1 个,我想发送两条消息。一对所有除了最后一个连接的客户端。一条消息最后连接的客户端。

当我将代码放在自定义 API Controller 中并基本上调用操作时,我一直使用的代码工作完美,但这不是我想要的。

我想在设备在 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();
}

最佳答案

除非我遗漏了你的问题,否则解决方案对我来说看起来很简单,你只需要切换到使用

Clients.Caller.hello("Send to only the last one");

而不是试图了解自己最后连接的 ID。其他的也一样,你可以使用:

Clients.Others.hello("Send to everyone except last");

您不需要您设置的所有逻辑,这两行可以满足您的需求,并且它们在 OnConnected 中工作。

关于c# - SignalR - 发送消息 OnConnected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30361524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com