maongo.core.toolkit.HTTPEngine extends Engine
Die HTTPEngine dient dazu, aus der Presentation heraus per HTTP-Request Daten anzufordern oder auszutauschen. Dazu kann eine entsprechende Server-URL definiert werden.
Die HTTPEngine nutzt die vom Browser bekannte Methode GET.
Bei der HTTPEngine einlaufende Daten aus Serverprozessen können folgende Formate haben:
Wird ein Data an die HTTPEngine geroutet, so wird es an den Server übertragen. Der Server kann darauf mit einer Transmission antworten, die dann wiederum von der HTTPEngine anhand der in ihr konfigurierten Routen in der Presentation verteilt wird. Eintreffende Transmissions lösen transmission- und data-Signale aus. Ausgehende Data lösen request-Signale aus. Siehe dazu auch Beispiel: Signale der HTTPEngine
Setzt die Serveradresse für die Kommunikation:
http://www.maongo.com/path/to/cgi
Default: null
Loginname für die Kommunikation mit URL.
Default: null
Passwort für die Kommunikation mit URL.
Default: null
Setzt das Text-Encoding für ausgehende Daten.
Default: "utf-8"
Werte: "utf-8", "latin-1"
als Zeitangabe (“30”, “30s”, “0.5m”). Wird ein HTTP-Request nicht innerhalb der angegebenen Zeit abgeschlossen, so wird er als communication-failure behandelt (siehe Signals) und abgebrochen/verworfen.
Default: 30 (30 Sekunden)
als Zeitangabe. In diesem Zeitabstand wird der Request wiederholt ausgelöst (Polling).
Default: null (kein Polling)
Derzeit ist eine Nutzung dieser Property noch nicht möglich.
Default: null
Derzeit ist eine Nutzung dieser Property noch nicht möglich.
Default: null
Derzeit ist eine Nutzung dieser Property noch nicht möglich.
Default: null
Die Signale beziehen sich teilweise auf die Abwicklung der Kommunikation und teilweise auf die geladenen Daten. Je nach geladenem Inhalt können sich die Signale unterscheiden.
Die Kommunikation war erfolgreich. Als Argument wird der Action das “rohe” Ergebnis des Requests übertragen. Dabei handelt es sich um ein Download-Objekt. Der Inhalt des Download-Objektes kann im Falle von XML mittels getSource() ausgelesen werden.
Beispiel:
<action trigger="communication-success" arguments="rawdata">
trace("rawdata:" + rawdata.getSource());
</action>
Mittels getText() können die geladenen Daten als Text ausgelesen werden.
Beispiel:
<action trigger="communication-success" arguments="rawdata">
trace("rawdata:" + rawdata.getText());
</action>
Bei Erfolg werden außerdem im Falle einer Transmision die spezifischen Signale transmission-start, transmission-end und transmission-data gesendet. Sofern es sich bei den geladenen Daten um XML, aber keine Transmission handelt, wird das Signal download-xml gesendet. In allen anderen Fällen wird das Signal download-text gesendet.
Eine Transmission ist angekommen; sie wird als Argument übertragen und kann hier direkt genutzt werden:
<action trigger="transmission-end" arguments="tr">
trace(tr.getSerial()); //getSerial() ist eine Methode der Transmission-Klasse.
</action>
Ein Data ist angekommen und wird als Argument übertragen:
<action trigger="transmission-data" arguments="data">
trace(data.get("Title"));
</action>
<widget name="Box1" x="10" y="10">
<property name="BackgroundColor" value="red"/>
<property name="Interactive" value="true"/>
<action trigger="pointer-down">
var commEngine = $(this,"comm");
commEngine.communicate();
</action>
</widget>
<engine name="comm" type="Http">
<property name="URL" value="http://www.maongo.com/examples/bom/resources/example.xml"/>
<action trigger="communication-request">
trace("communication-request");
</action>
<action trigger="communication-success" arguments="rawdata">
trace("communication-success: " + rawdata);
</action>
<action trigger="communication-failure" arguments="excp">
trace("communication-failure: " + excp);
</action>
<action trigger="transmission-start" arguments="excp">
trace("transmission-start: " + excp);
</action>
<action trigger="transmission-end" arguments="trans">
trace("transmission-end: " + trans);
</action>
<action trigger="transmission-data" arguments="data">
trace("transmission-data: " + data);
</action>
<action trigger="download-xml" arguments="xmlroot">
trace("download-xml: " + xmlroot);
</action>
<action trigger="download-text" arguments="text">
trace("download-text: " + text);
</action>
</engine>
Beispiel:
$(this, "commEngine").communicate()
Der automatische Routing-Mechanismus für Data weist für Kommunikations-Engines wie die HTTP-Engine eine Besonderheit auf:
Wird ein Data von anderer Stelle in der Presentation auf die Engine geroutet, so wird dieses Data zum Server übertragen.
Note
Das Versenden von Data, welche auf die HTTPEngine geroutet werden ist derzeit nicht implementiert.
Die in der Engine eingetragene Route wird genutzt, um einen vom Server erhaltenen Inhalt zu routen, falls dieser Inhalt geroutet werden kann, also falls er als Data vorliegt.
Aus eingehenden Transmissions werden die einzelnen Data-Objekte so geroutet. Eingehendes JSON wird in ein Data-Objekt verwandelt und ebenfalls geroutet. Jeweils vorausgesetzt, dass entsprechende Routen in der Engine eingetragen sind.
Beispiel 1:
<presentation>
<widget name="Button1" type="Button" x="20" y="20" shape="R 50 50">
<property name="BackgroundColor" value="olive"/>
<action trigger="pointer-down">
$(this, "comm").communicate();
$(this, "comm").URL = "http://www.maongo.com/notfound";
</action>
</widget>
<widget name="Widget2" y="20" x="100" shape="O 50">
<property name="BackgroundColor" value="gray"/>
</widget>
<engine name="comm" type="Http">
<property name="URL" value="http://www.maongo.com/examples/bom/resources/example.xml" />
<route property="*" match="*" target="widget2" />
<action trigger="transmission-data">
$(this, "startButton").BackgroundColor = "orange";
</action>
<action trigger="communication-success">
$(this, "Widget2").BackgroundColor = "green";
</action>
<action trigger="communication-failure">
$(this, "Widget2").BackgroundColor = "red";
</action>
</engine>
</presentation>
Button 1 startet bei Klick die HTTPEngine. Diese färbt bei eingetroffenem Data den Button orange, und je nach Erfolg der Kommunikation mit dem Server das Widget2 grün oder rot. Gleichzeitig wird die URL der Engine auf eine nicht erreichbare Adresse umgeschrieben, sodaß ein zweiter Klick einen communication-failure auslöst.
Beispiel 2:
<presentation width="600" height="600">
<widget type="Button" x="10" y="10">
<property name="Shape" value="R 150 20"/>
<property name="Text" value="Transmission laden"/>
<action trigger="button-clicked">
$(this, "CommResult").BackgroundColor = "white";
$(this,"comm").URL = "http://www.maongo.com/examples/bom/resources/basictransmission.xml";
$(this,"comm").communicate();
</action>
</widget>
<widget type="Button" x="10" y="40">
<property name="Shape" value="R 150 20"/>
<property name="Text" value="JSON laden"/>
<action trigger="button-clicked">
$(this, "CommResult").BackgroundColor = "white";
$(this,"comm").URL = "http://www.maongo.com/examples/bom/resources/basicjson.json";
$(this,"comm").communicate();
</action>
</widget>
<widget type="Button" x="10" y="70">
<property name="Shape" value="R 150 20"/>
<property name="Text" value="XML laden"/>
<action trigger="button-clicked">
$(this, "CommResult").BackgroundColor = "white";
$(this,"comm").URL = "http://www.maongo.com/examples/bom/resources/basicxml.xml";
$(this,"comm").communicate();
</action>
</widget>
<widget type="Button" x="10" y="100">
<property name="Shape" value="R 150 20"/>
<property name="Text" value="Text laden"/>
<action trigger="button-clicked">
$(this, "CommResult").BackgroundColor = "white";
$(this,"comm").URL = "http://www.maongo.com/examples/bom/resources/basictext.txt";
$(this,"comm").communicate();
</action>
</widget>
<widget type="Button" x="10" y="130">
<property name="Shape" value="R 150 20"/>
<property name="Text" value="Ladefehler auslösen"/>
<action trigger="button-clicked">
$(this, "CommResult").BackgroundColor = "white";
$(this,"comm").URL = "http://www.maongo.com/examples/bom/resources/nonexisting.xml";
$(this,"comm").communicate();
</action>
</widget>
<widget name="CommResult" type="Text" x="300" y="10">
<property name="Shape" value="R 250 20"/>
<property name="Text" value="Kommunikation erfolgreich?"/>
<property name="BackgroundColor" value="white"/>
<property name="BorderColor" value="black"/>
<property name="BorderWidth" value="1"/>
</widget>
<engine name="comm" type="Http">
<property name="URL" value="http://www.maongo.com/examples/bom/resources/example.xml"/>
<action trigger="communication-request">
trace("communication-request");
</action>
<action trigger="communication-success" arguments="rawdata">
trace("communication-success: " + rawdata);
$(this, "CommResult").BackgroundColor = "green";
</action>
<action trigger="communication-failure" arguments="excp">
trace("communication-failure: " + excp);
$(this, "CommResult").BackgroundColor = "red";
</action>
<action trigger="transmission-start" arguments="excp">
trace("transmission-start: " + excp);
</action>
<action trigger="transmission-end" arguments="trans">
trace("transmission-end: " + trans);
</action>
<action trigger="transmission-data" arguments="data">
trace("transmission-data: " + data);
</action>
<action trigger="download-xml" arguments="xmlroot">
trace("download-xml: " + xmlroot);
</action>
<action trigger="download-text" arguments="text">
trace("download-text: " + text);
</action>
</engine>
</presentation>
In diesem Beispiel können über die verschiedenen Buttons unterschiedliche Datentypen geladen werden. Über die jeweiligen Actions werden die dabei auftretenden Signale ausgegeben. Je nach Erfolg oder Mißerfolg der Kommunikation wird das Widget “CommResult” grün oder rot eingefärbt.