2016-04-20 7 views
2

Ich experimentiere mit ServiceStack Server Ereignisse Feature und möchte eine Art von "Online-Nutzer" Test-App machen. Die Idee ist, dass ich jeden Benutzer aktualisieren möchte, der sich mit einem Kanal "Benutzer" verbindet, wenn ein neuer Benutzer beitritt oder weggeht. Das Problem ist, dass ich keinen Weg finden kann, um zu erkennen, wann ein Abonnement/Benutzer die Verbindung trennt oder trennt.ServiceStack-Ereignis für Client trennen

Antwort

0

Der ServerEventsClient.OnCommand Rückruf wird ausgelöst, wenn ein Benutzer tritt, Blätter oder Updates ihre ServerEvent Abonnement.

var sseClient = new ServerEventsClient(...); 

var response = sseClient.ServiceClient.Get(new GetEventSubscribers { 
    Channels = sseClient.Channels 
}); 

, die eine Liste von nicht typisierten Dictionary<string,string> mit den Abonnenten öffentlichen Informationen werden zurück:

Sie können auch jederzeit mit einer Liste aller aktiven Teilnehmer aus einem Kanal holen.

Außerdem habe ich nur eines typisierten API für GetChannelSubscribers() in this commit, die von v4.0.57 on MyGet jetzt verfügbar ist, die eine typisierte API bietet alle Benutzer auf die ServerEventsClient Kanäle abonniert zu holen, zB:

var channelSubscribers = sseClient.GetChannelSubscribers(); 
+0

Gibt es auf gleichwertige Veranstaltungen Auf der Serverseite muss ich eine Art klassischen TCP/IP-Client-Server erstellen, bei dem der Server Hintergrundinformationen ausführen und die Clients aktualisieren muss (und nicht davon abhängig sein müssen, dass jemand etwas anruft, um damit anzufangen). – Ravenheart

+0

Auch wenn ein Client unsauber trennt (sagen Sie, die App zu töten) und sie keine Chance haben, die Registrierung des Servers aufzuheben entfernt sie nicht aus der Liste der aktiven Teilnehmer (/ Event-Abonnenten) für eine lange Zeit Zeit (in der Region von Minuten). – Ravenheart

+0

@Ravenheart Sie können einen Callback auf 'ServerEventsFeature.OnUnsubscribe' registrieren, er wird auch ausgelöst, wenn der Client nicht sauber abmeldet, da er keine Heartbeats mehr sendet und nach' ServerEventsFeature.IdleTimeout' (Standard 30sec) wird er automatisch abgemeldet . – mythz