VCR.NET 4.1 wird keine der früheren SOAP basierten Web Schnittstellen mehr anbieten. Daher muss sich nun unter anderem auch das VCR.NET Kontrollzentrum einer anderen Art der Kommunikation bedienen – das Kontrollzentrum ist die Anwendung, die der Anwender als normalerweise farbig hinterlegtes Kamerasymbol im System Tray von Windows sieht. Weitestgehend konnte ich mich dabei auf die neuen REST Diensten stützen, die für den neuen Web Client sowieso benötigt werden. Eine Ausnahme ist dabei allerdings der automatische Übergang in den Schlafzustand, der nach abgeschlossenen Aufzeichnungen oder Aufgaben ausgelöst werden kann. Dazu hier ein wenig Hintergrundinformationen und eine kurze Vorstellung der vom Kontrollzentrum eingesetzten Methoden.
Wenn der VCR.NET Recording Service nach einer Aufzeichnung oder Aufgabe feststellt, dass keines der zugeordneten Geräte mehr in Benutzung ist, so wird intern vermerkt, dass ein Übergang in den Schlafzustand durchgeführt werden kann – natürlich nur, wenn die Konfiguration es gestattet, einen solchen Übergang auszuführen. Nun ist es aber möglich, dass ein solcher Übergang nicht unmittelbar möglich ist: pro Aufzeichnung (und Aufgabe) können so genannte Erweiterungen definiert werden, die zu einem bestimmten Zeitpunkt während der Durchführung der Aktivität als separate Windows Prozesse gestartet werden. Ich selbst nutze etwa das LIVE Demux intensiv, das bereits beim Starten einer Aufzeichnung den Demux Vorgang via ProjectX aktiviert und diesen dann parallel zur Aufzeichnung kontinuierlich durchführt. Allerdings hat diese Erweiterung auch nach Ende der Aufzeichnung eine gewisse Nachlaufzeit, die der VCR.NET Recording Service vor dem Übergang in den Schlafzustand abwartet.
Kommt es dann nun endlich an den Punkt, an dem ein Übergang in den Schlafzustand durchgeführt werden darf, so prüft VCR.NET trotzdem noch, ob Anwender interaktiv am System angemeldet sind. Ist dies der Fall, so wird der Übergang nicht durchgeführt – die Prüfung wird frühestens mit dem Ende der nächsten Aufzeichnung oder Aufgabe wiederholt. An dieser Stelle kommt nun das VCR.NET Kontrollzentrum ins Spiel.
Das Kontrollzentrum ruft periodisch den REST Web Service Info (http://rechner/vcr.net/info) via GET auf und erhält dann folgende Informationen:
- hibernationPending: ist gesetzt, wenn ein Schlafzustand grundsätzlich ansteht.
- extensionsRunning: ist gesetzt, wenn irgendwelche Erweiterungen aktiv sind.
Je nach Konfiguration des Kontrollzentrums erkennt dieses daraus, wenn der VCR.NET Recording Service in den Schlafzustand wechseln möchte – dies aber nicht kann, weil ja mindestens der Anwender interaktiv angemeldet ist, in dessen Namen es selbst ausgeführt wird. In einem ersten Schritt wird über ein POST auf den REST Web Dienst Hibernate (http://rechner/vcr.net/hibernate?reset) VCR.NET mitgeteilt, dass der Übergang in den Schlafzustand nun durch das Kontrollzentrum geregelt wird – der VCR.NET Recording Service setzt daraufhin die interne Markierung zurück. Das Kontrollzentrum öffnet gleichzeitig den sicher bekannten Dialog, der den Übergang in den Schlafzustand ankündigt.
Wird dieser Dialog vom Anwender nicht im konfigurierten Zeitraum geschlossen, so löst das Kontrollzentrum den Schlafzustand durch ein weiteres POST auf den Hibernate Web Dienst (http://rechner/vcr.net/hibernate?hibernate) nun endgültig aus. Dieser Vorgang wird allerdings verzögert, so lange VCR.NET meldet, dass Erweiterungen aktiv sind.
Im Endeffekt läuft die gesamte Steuerung des Schlafzustands für den Fall interaktiver Anwender also im Wesentlichen über 3 einfache Aufrufe der VCR.NET 4.1 Web Dienste. Es sollte daher auch kein Problem sein, diese Funktionalität in eigene Anwendung zu integrieren und an die eigenen Bedürfnissen anzupassen, wenn der relative starre Mechanismus des VCR.NET Kontrollzentrums nicht ausreichen sollte.
Viel Spaß
Jochen