.. sectionauthor:: malte
.. _ref-infrastruktur:
###############################################################################
Messages - Maongo kommuniziert mit der Umwelt
###############################################################################
Kommunikation zwischen Maongo und der einbindenden Host-Umgebung
==============================================================================
Häufig wird eine Maongo-Anwendung innerhalb einer anderen Anwendung ausgeführt. Dies kann eine HTML-Seite sein,
eine Flex-Anwendung oder eine Java-Anwendung. Um die Kommunikation zwischen der Host-Umgebung und der Maongo-Anwendung
zu ermöglichen, stellt Maongo definierte Schnittstellen zur Übermittlung von Nachrichten bereit. Diese ``Messages`` bestehen
aus einem ``MessageName`` und einer beliebigen Anzahl von Parametern als Nutzlast. Dabei dient der ``MessageName`` zur
Identifizierung der Nachricht und kann genutzt werden um die Nachricht in der Maongo-Anwendung bzw. der Host-Umgebung an die richtige
Stelle weiterzugeben.
Setup der Host-Umgebung
===============================================================================
Um diese Funktionalität nutzen zu können muss die Host-Umgebung entsprechende Funktionen (Javascript bzw. Java) implementieren. Die Funktionen
werden bspw. von den Maongo-Compilern für HTML und Flash schon in die generierten HTML-Seiten integriert.
**HTML-Ausspielung**
Der folgende Code-Abschnitt erlaubt den Zugriff auf die Maongo-Anwendung über die Kurzfassung ``document.mymaongoapp`` indem eine Referenz auf die erzeugte
Applikation an der entsprechenden Stelle im DOM-Tree abgelegt wird.
::
...
var app = new mymaongoapp(...);
// setup for messaging
document.mymaongoapp = app;
...
Hiermit wird eine Javascript-Funktion als Handler für ``Messages`` aus der Maongo-Anwendung registriert.
::
...
// setup message handler
document.mymaongoapp.onMessage = messageCallback;
...
**in HTML eingebundener Flashfilm**
Der folgende Javascript-Code-Abschnitt erlaubt den Zugriff auf die Maongo-Anwendung über die Kurzfassung ``document.mymaongoapp`` indem eine Referenz
auf das eingebundene SWF-File an der entsprechenden Stelle im DOM-Tree abgelegt wird.
::
...
//allow external messaging to app
document.mymaongoapp = document.getElementById("mymaongoapp");
...
Da der Handler für ``Messages`` aus der Maongo-Anwendung erst auf dem Flashfilm registriert werden kann, wenn dieser geladen ist und das Javascript-API
initialisiert hat, wird eine definierte Funktion in der HTML-Seite angelegt, welche den Namen des Handlers zurückliefert. Diese Funktion wird vom
Flashfilm aufgerufen, sobald dieser vollständig geladen ist.
::
//called from maongo after loading
function sendMessageHandler(){
document.mymaongoapp.registerMessageHandler("messageCallback");
}
Der Zugriff des Flashfilms auf die HTML-Seite mittels Javascript wird über den Parameter ``allowScriptAccess`` in der HTML-Einbindung gesteuert.
Dieser ist per default mit dem Wert ``sameDomain`` gesetzt. Dies bedeutet das der Zugriff nur erlaubt ist, wenn Flashfilm und HTML-Dokument von
der gleichen Domain ausgeliefert werden. Sollte dies nicht der Fall sein, so kann der Wert auf ``always`` gesetzt werden.
::
bzw.
::
**Flex-Anwendung**
Um Nachrichten aus der Maongo-Anwendung in der Flex-Umgebung zu erhalten, muss eine Funktion der Flex-Umgebung als Message-Handler registriert werden
::
maongoComponent.registerMessageCallback(messageCallback);
**Java-Anwendung**
*TODO*
Nachrichten an eine Maongo-Anwendung schicken
===============================================================================
Nachrichten werden an die Maongo-Anwendung geschickt, indem auf der Anwendung die Funktion ``message(messageName, parameterList)`` aufgerufen wird.
Dabei ist die Anzahl der Parameter beliebig. Diese müssen allerdings in einen Array verpackt werden.
**HTML-Ausspielung**
::
send Message to Maongo
**in HTML eingebundener Flashfilm**
::
send Message to Maongo
**Flex-Anwendung**
Aus einer Flex-Anwendung werden Nachrichten an die Maongo-Anwendung geschickt, indem die MaongoFlexComponent genutzt wird.
::
maongoComponent.message("messageName",["hallo welt,"klaus",23]);
**Java-Anwendung**
*TODO*
Nachrichten aus einer Maongo-Anwendung empfangen
===============================================================================
Wenn Nachrichten aus Maongo verschickt werden sollen, so kann dieses innerhalb des MAD-Dokument auf jedem Widget mittels einer Action geschehen.
::