Ho sperimentato con SignalR oggi ed è davvero pulito. Fondamentalmente quello che volevo ottenere è il seguente:SignalR - Invia messaggio OnConnected
Non appena un dispositivo si connette dovrebbe inviare un messaggio al primo. Se ci sono più dispositivi di 1 collegato, vorrei inviare due messaggi. Uno a tutti eccetto l'ultimo client connesso. E un messaggio a solo l'ultimo client connesso.
Il codice che ho utilizzato funziona perfettamente quando lo inserisco in un controller API personalizzato e fondamentalmente richiamo l'azione, ma non è quello che voglio.
Desidero inviare i messaggi non appena un dispositivo si connette entro OnConnected
senza alcuna interazione da parte dell'utente, ma quando inserisco il mio codice all'interno della forzatura OnConnected
, smette di funzionare. Non invia più ai client specifici (prima connesso e ultimo connesso).
Spero che qualcuno sia in grado di aiutarmi con questo, perché ho battuto la testa per un paio d'ore.
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();
}
grazie molto per questo codice. In realtà rende il mio codice molto più semplice! – Mittchel