Kommunikation zwischen mehreren Flash-Objekten über LocalConnection
Flash und Flex sind mit der Programmiersprache Actionscript, welche auf dem ECMAScript-Standard basiert, weit mehr als nur ein Spielzeug um Videos oder blinkende Werbefilme abzuspielen. Durch die Unterstützung des objektorientierten Programmierparadigmas, guter Möglichkeiten der Serveranbindung und nicht zuletzt der Browser-Unabhängigkeit, die das Adobe Flash Plugin out of the Box bereitstellt, ist Flash ein Werkzeug, welches Beachtung verdient.
In diesem Beitrag soll anhand der Kommunikation zwischen verschiedenen Flash-Dateien, die in einer Seite eingebunden sind, gezeigt werden, wie robuste "Inter-Flash"-Kommunikation mit der LocalConnection-Klasse [1] in Flash funktioniert.
Sender
Zuerst wird eine Verbindung mit einem LocalConnection-Objekt aufgebaut. Im Anschluss können über einen frei wählbaren "Kanal" Daten gesendet werden. Das folgende Beispiel soll dies veranschaulichen:
var conn:LocalConnection = new LocalConnection();
conn.addEventListener(StatusEvent.STATUS, onStatusConn);
conn.send("exensioConnectionChannel", "connectionHandler", "exensio GmbH", "Other payload");
Es wird also über den Kanal "exensioConnectionChannel" bei jedem Client die Methode "connectionHandler" aufgerufen, die zwei String-Parameter erwartet. In diesem Fall werden "exensio GmbH" und "Other payload" als Daten gesendet. Dabei ist die Anzahl der zu übermittelnden Parameter beliebig.
Empfänger
Auf Empfänger-Seite muss ebenso eine Verbindung über ein LocalConnection-Objekt bestehen. Dabwei muss auf dem gleichen Kanal auf Nachrichten gewartet werden, über welchen auch der Sender Daten sendet. Im Beispiel sieht das wie folgt aus:
var recConn:LocalConenction = new LocalConnection();
recConn.connect("exensioConnectionChannel");
recConn.client = new ReceiverHandler();
recConn.addEventListener(StatusEvent.STATUS, onStatusRecConn);
Die Unterschiede zum Code des Senders bestehen hier also in der Angabe des Verbindungsaufbaus über "connect" und der Angabe eines "Clients". Diese Angabe gibt die Klasse an, in welcher die vom Sender bestimmte Methode enthalten ist. Ein Auszug aus unserer Klasse "RecieverHandler" sieht wie folgt aus:
public function connectionHandler(companyName:String, payload:String):void {
//...
}
Die Angabe eines EventListeners, der auf das Status-Event "Status" reagiert, ist optional. Es empfiehlt sich jedoch, einen solchen anzugeben und zu implementieren, da darin die Fehlerbehandlung vorgenommen werden kann.
Fazit
Mit der LocalConnection-Klasse ist es in Flash und Flex auf einfache Weise möglich, Daten zwischen mehreren Flash-Dateien auszutauschen, ohne dabei den Umweg über einen weiterleitenden Server gehen zu müssen. Benötigen also mehrere Flash-Dateien auf einer Seite die gleichen Daten eines entfernten Servers, müssen diese nur einmal abgerufen werden um so etwa Serverressourcen zu sparen.
Links
[1] http://livedocs.adobe.com/flash/9.0_de/ActionScriptLangRefV3/flash/net/LocalConnection.html