Я экспериментировал с SignalR сегодня, и это действительно опрятно. В основном, чего я хотел достичь, является следующее:SignalR - Отправить сообщение OnConnected
Как только устройство подключается, оно должно отправить сообщение первому. Если есть больше устройств, чем 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();
}
спасибо много для этого кода. Это делает мой код намного проще! – Mittchel