Ich habe heute mit SignalR experimentiert und es ist wirklich nett. Grundsätzlich wollte ich Folgendes erreichen:SignalR - Nachricht senden OnConnected
Sobald ein Gerät verbindet, sollte es eine Nachricht an die erste senden. Wenn mehr Geräte als 1 verbunden sind, möchte ich zwei Nachrichten senden. Einer für alle außer der letzte verbundene Client. Und eine Nachricht an nur der letzte verbundene Client.
Der Code, den ich verwendet habe funktioniert perfekt, wenn ich es in einem benutzerdefinierten API-Controller und im Grunde die Aktion aufrufen, aber das ist nicht was ich will.
Ich möchte die Nachrichten senden, sobald ein Gerät innerhalb von OnConnected
ohne Benutzerinteraktion verbindet, aber wenn ich meinen Code innerhalb der OnConnected
überschreiben, funktioniert es nicht mehr. Es wird nicht mehr an die spezifischen Clients gesendet (zuerst verbunden und zuletzt verbunden).
Ich hoffe, dass mir jemand dabei helfen kann, weil ich mir seit ein paar Stunden den Kopf schlage.
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();
}
vielen Dank für diesen Code. Es macht meinen Code viel einfacher! – Mittchel