LocalConnection

/ Autor: Alexander, 17 Okt 2008

In manchen Fällen ist es nötig dass zwei getrennte SWF-Container mit einander kommunizieren können, um zum Beispiel einen Datenaustausch oder eine Steuerung des einen SWFs durch das andere zu gewährleisten.

Für diese Kommunikation gibt es verschiedene Möglichkeiten und auch Schnittstellen. Eine wäre die Kommunikation mittels JavaScript falls die SWFs in der selben HTML-Seite liegen. Jedoch birgt dies Probleme: Die Kommunikation entfällt falls JavaScript deaktiviert ist und ist dies ein kleines Sicherheitsrisiko da dem User ein Zugang zur SWF-Datei geboten wird. Hier kann der User die Daten manipulieren.

Interessanter für eine Schnittstelle ist die LocalConnection. Sie bietet alle erforderlichen Funktionen und Eigenschaften um die Kommunikation zu erstellen. Mit ihr wird ein eindeutiger Kommunikationskanal geschaffen, worüber Funktionen mit Parameterübergabe in der anderen SWF aufgerufen werden kann.

Der Datenaustausch ist bei der LocalConnection auch nicht darauf beschränkt, dass beide SWFs in einem Container liegen. Vielmehr können mit ihr alle SWFs die auf einem Client laufen miteinander Daten austauschen, also kann zum Beispiel eine AIR-Applikation mit einem SWF in einer HTML-Seite kommunizieren. Auch der Datenaustausch zwischen Flash und Flex ist möglich, da beide die entsprechende Klasse bereitstellen.

Der Aufbau einer LocalConnection ist relativ einfach und innerhalb weniger Zeilen Code realisierbar:

Sender SWF:

private var _localConnect:LocalConnection = new LocalConnection();
private function initConnection() : void{

_localConnect.addEventListener(StatusEvent.STATUS, onStatusHandler);
}
private function onStatusHandler(event:StatusEvent):void {
switch (event.level) {
case "status":
trace("LocalConnection.send() succeeded");
break;
case "error":
trace("LocalConnection.send() failed");
break;
}
}
private function aButtonClicked(event:MouseEvent) : void{
_localConnect:LocalConnection.send('connectionName', 'calledFunction', param:Type);
}

Empfänger SWF
private var _receiveConnect:LocalConnection = new LocalConnection();
private function initConnection() : void{
_receiveConnect.client = this;
try {
_receiveConnect.connect('connectionName');
}
catch (error:ArgumentError) {
trace("Can't connect.");
}
}
public function calledFunction (param:Type) : void {
// do something
}

Mit diesen beiden Codeschnipseln lässt sich die Kommuniktion aufbauen und problemlos Daten senden. Die Kommunikation erfolgt, wie man im Beispiel sieht immer nur in eine Richtung. Für die Rückkommunikation ist eine weitere LocalConnection erforderlich. Jedoch ist eine Kommunikation zwischen ActionScript 3 SWFs in Richtung ActionScript 1 und 2 SWFs, sowie in entgegengesetzter Richtung, möglich.

Mit der LocalConnection ist also eine einfach erstellte Schnittstelle, die eine problemlose Kommunikation ermöglicht, vorhanden. Sie kann vielfältig genutzt werden und bietet viele Vorteile gegenüber einer Kommunikation mit zum Beispiel ExternalInterface zwischen SWFs.

Leave a Reply