Scribbles zum Remote Interface
Kommuniziert wird via HTTP. Eine erste Version sollte im Browser via Ajax funktionieren. Der HTTP Server läuft in vvvv.
Authentifizierung mit passwort -> server erzeugt entweder eine session (schwierig mit jeztiger http komponente) oder sperrt den
zugriff wenn schon jemand mit einer IP eingeloggt ist. Dies erfordert vom Server eine ständige überprüfung der Client IP.
Ablauf:
- In vvvv werden mit speziellen Knoten Interface Elemente definiert. Die Repräsentation dieser Knoten (z.B. Slider, Button, Enum, Colorpicker, Textfeld...) im Browser Interface wird über je ein XUL File definiert. Es gibt einen Remote Ordner in der vvvv distribution mit standart XUL Files. Genau wie beim tikiwiki kann man sich selber einen Unterordner anlegen und darin einzelne XUL Files anpassen und ablegen. die vvvv knoten bekommen ein EnumPin mit der Liste der Verfügbaren Styles. Über das XUL File können auch die in vvvv über Pins verfügbaren Parameter gesteuert werden. Dies funktioniert mit einer eigens definierten Scriptsprache, die der folgenden Syntax gehorcht
$$datentyp 'defaultwert'$$
Beispiel:
<slider label="$$string 'input'$$" tabindex="$$int '6'$$" style="$$color '#FFFFFF'$$" />
vvvv legt für jeden gefunden Platzhalter einen entsprechenden Pin an
Oder es können statische [Bilder und Texte eingefügt werden. Ebenso kann das CSS file im Ordner geändert werden.
- Mit dem Browser wird die in vvvv vergebene URL mit HTTP Get angefragt. Die Kommunikation läuft über HTTPS
- vvvv checkt die IP Adresse des Clients und schickt ein HTML Authentifizierungsforumlar zurück
- Der Browser übermittelt die eingegebenen Daten an vvvv via HTTP POST
- vvvv entscheidet im Fall von korrekten Authentifizierungsdaten ob bereits eine IP auf das System zugreift, wenn ja, schickt vvvv eine entsprechende Fehlermeldung an den Browser zurück. Im Fall von falschen Auth-Daten, schickt vvvv das Formular noch einmal zurück.
- Falls noch keine andere IP registriert ist hat der Browser Zugriff. vvvv sendet dann das XUL file zurück und legt eine XML Datei mit den aktuellen vvvv werten an. Diese Datei wird bei eingehenden neuen Werten mitgeschrieben.
- Der Browser nimmt die XUL beschreibung entgegen und stellt daraus das HTML/Javascript Interface zusammen. Dieser Teil stellt sich als nciht trivial heraus. Nach bisherigen Recherchen habe ich noch kein Projekt gefunden, welches rein Clientseitig aus XUL eine funktionierendes Ajax Interface generiert... Martin meint, das müsse aber gehen und sei zu implementieren. XSLT kann hier auch helfen um alle nötigen XHTML elemente zu generieren.http://interface.eyecon.ro/demos Interface Bibliothek für JQuery
Alternativ kann man auch nur das XUL File liefern und direkt mit Firefox darstellen lassen... Dann ist man aber auf den Firefox beschränkt.
- optional: von jetzt an fragt der Browser in Regelmäßigen Abständen den vvvv server nach der aktuellen Interfacebeschreibung an, um evtl. vvvv seitig geänderte einstellungen ebenfalls darstellen zu können.
- Wird ein Wert im Browserinterface geändert wird via XMLHttpRequest eine XML Beschreibung mit der ElementID und dem neuen Wert an vvvv gesendet
- vvvv nimmt den Wert entgegen, gibt ihn an den Pins aus und speichert ihn in oben genannten XML File ab. An den Browser wird eine XML Beschreibung "OK hat funktioniert" übermittelt. Im Fall von Korruptionnen wird eine entsprechende Fehlermeldung an den Browser zurückgeschickt. Bleibt die "Ok" Meldung aus, so "weiß" der Browser dass entwas schiefgelaufen ist.
- Wird vvvv geschlossen, oder der rechner neu gebootet, wird beim anlegen der Interfaceknoten, registiert, ob das XML-File mit den Werten vorhanden ist, wenn ja werden diese Werte an den Outputpins ausgegeben. Wenn nein werden die Defaultwerte an den Inputpins genommen.
I/O Knoten
Paramater werden von XUL Referenz abgeleitet. (Xul enthält auch Attribute zur Ausrichtung, Breite und Höhe von Elementen), Via CSS kann dann das aussehen geändert werden.
- Slider: ->Slider mit min, max und increment
- Button -> checkbox, true, false
- Color-> Colorpicker, RGB Value
- Enum -> Dropdown
Gruppierungsknoten
Der Hierarchie nach geordnet. Vorstellbar wie hier:http://www.hevanet.com/acorbin/xul/top.xul
- Sidebarpanel
- Tabs -> Tableiste
- Groupbox -> Umrandung mit Name
Interface
Alle Spreads von Interfaceelementen sind per Drag & Drop im Interface sortierbar und werden bei jedem neu sortieren in entsprechender Reihenfolge an vvvv übermittelt. hier ist wahrscheinlich dann ein Parameter "Index" erforderlich, der die Position enthält
echtzeit änderung heißt: oncommand (ondrag bei slidern, onenter bei valuewerten, onchenge bei dropdowns... etc)
gibt es einen ajax request an den vvvv http server zum ändern des entsprechenden wertes...
Weitere Literatur
Tolles XUL Remote Application Beispielhttp://www.faser.net/mab/remote.cfm
Xul und HTML zusammen:http://www.xml.com/pub/a/2007/01/31/xul-enhanced-web-apps.html