asLocalConnect (AS3) - The better way of LocalConnection

ActionScript 3 / Letzte Aktualisierung 12.09.2009

asLocalConnect ist eine Erweiterung bzw. Ersatz für die Standard LocalConnection.
Es bietet einiges mehr an Feature und ist auch für Anfänger interessant, da hier sehr einfach und schnell eine LocalConnection aufgebaut und verwendet werden kann.

Inhalt

Vorwort

Als ich mich eine Zeit lang näher mit Localconnection beschäftigt habe ist mir aufgefallen, das Localconnection zwar eine schöne Sache ist, aber es doch sehr viele Hürden und Hindernisse mit sich bringt.
Vor allem wenn die Flashdateien von verschiedenen Servern oder einen Lastenverteiler geladen werden kommt es schon mal vor, das die Localconnection nicht startet.
Es gibt natürlich einige Workarrounds für die jeweiligen Probleme, nur dachte ich mir warum nicht eine Alternative dafür entwickeln und so ist asLocalConnect entstanden.
Ziel war es alle Features von LocalConnection zu unterstützen und noch einige neue Features hinzu zufügen.

Unterschiede zwischen LocalConnection und asLocalConnect

Nachteile von LocalConnection

  • Keine Heartbeat Unterstützung (Gegenseiteige Prüfung)
  • Keine Events wenn andere LocalConnections verfügbar sind
  • Keine Events wenn diese wieder die Verbindung verlieren
  • Keine Broadcast Funktion
  • Keine Synchronisation
  • Keine helfenden Fehlermeldungen
  • Keine mehrfache anzeigen der selben Flashdateien möglich (zB: verschiedene Browserfenster / Browsertabs)
  • Keine Übersicht über Funktion die per LocalConnection verarbeitet werden
  • Sicherheitsabfragen müssen selber definiert werden
  • Limit bei der Menge der Daten die übertragen werden können, welches aber nicht genau bekannt ist :(

Vorteile von asLocalConnect

  • Heartbeat Unterstützung für eine beliebige Anzahl von LocalConnections
  • Events für onLoad, onUnload, onSync und onHeartBeat
  • Broadcasting Funktion
  • Einfache Synchronisation bis auf -10ms/+10ms von mehreren Flashdateien
  • Channel Funktion, somit können die selben Flashdateien mehrfach angezeigt werden ohne sich dabei gegenseitig zu stören
  • Funktion die der LocalConnection zugewiesen werden, können abgefragt werden
  • Einfaches Sicherheitslevel Konzept welches Standardanwendungen vollständig abbildet
  • Einfaches Erstellen von LocalConnection und Status Abfrage einzelner LocalConnections
  • Versucht durch Timing und andere kleinen Tricks das Limit von der Verbindungslimit / Datenmenge zu umgehen
  • und weiter Verbesserungen folgen...

Hinweis zu asLocalConnect

Die Komponente asLocalConnect unterliegt der BSD Lizenz, die dazu gehörige Dokumentation / Beispiele unterliegt der Creative Commons (by-sa) Lizenz. Mehr Information gibs es auch auf http://sourceforge.net/projects/aslocalconnect.

Download von asLocalConnect 0.5

asLocalConnect wird auf SourceForge gehostet auf dieser Seite kann die aktuelle Version heruntergeladen werden und Fehler bzw. Verbesserungen eingereicht werden.

Installation von asLocalConnect

asLocalConnect 0.5 wird als Package bereit gestellt, der entsprechenden Package Ordner "de" wird einfach in den selben Ordner kopiert wo auch die entsprechenden FLA Datei liegt.

Einfaches Beispiel

Das nachfolgenden Codebeispiel soll zeigen wie einfach mit Hilfe von asLocalConnect eine LocalConnection aufgebaut werden kann, welche auch noch einen HeartBeat enthält.

Empfänger definieren

ActionScript Code:
import de.markusbordihn.flash.as3.asLocalConnect; var lc_FlashB:asLocalConnect = new asLocalConnect('FlashB'); lc_FlashB.setSecurity(5); lc_FlashB.listen('test', function (_text:String) { trace('Empfange: '+_text); }); lc_FlashB.heartbeat('FlashA');

Hier hat die LocalConnection den Namen FlashB und führt einen "trace" aus, sobald jemand über LocalConnection auf die Funktion 'test' zugreift.
Außerdem wird ein Heartbeat mit FlashA gestartet, damit FlashA genau weiß wann diese Daten an FlashB senden kann.
Der Befehl setSecurity(5) sorgt dafür, das die Flashdatei Befehle von anderen Flashdateien, auch lokalen Flashdateien akzeptiert.

Sender definieren

ActionScript Code
import de.markusbordihn.flash.as3.asLocalConnect; var lc_FlashA:asLocalConnect = new asLocalConnect('FlashA'); lc_FlashA.onLoad(function () { lc_FlashA.send('FlashB', 'test', 'Hello World'); }); lc_FlashA.heartbeat('FlashB');

Hier hat die LocalConnection den Namen "FlashA" und sendet an "FlashB" den String "Hello World", sobald diese verfügbar ist.
Die letzte Zeile starten den Heartbeat mit FlashB damit FlashA genau weiß wann dieses Daten senden kann.

Erweiterte Beispiele

2 Flashdateien die Daten austauschen mit asLocalConnect und Heartbeat

Anbei ein Beispiel mit asLocalConnect, hier sieht man das die Flashdateien genau wissen wann die andere Datei verfügbar oder nicht mehr da ist.
Durch die verschiedenen Event-Händler wie "onLoad" und "onUnload" lässt sich sehr genau festlegen wie sich die Flashdateien in welchen Fall zu verhalten haben.

Bitte öffnet Example A und Example B in beliebiger Reihenfolge, natürlich können diese auch in unterschiedlichen Browser geöffnet werden.
Sobald sich beide Flashdateien gefunden haben erscheint eine Eingabe-box, wo Text zwischen den beiden Flashdateien verschickt werden kann.

ActionScript Code

Der ActionScript Code von den beiden Flash Dateien unterscheidet sich eigentlich nicht wirklich, nur bei den Namen für die LocalConnection und wohin die Daten gesendet werden.

Flash A:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; show_ff(false); status.text = "Loading..."; var lc_flasha:asLocalConnect = new asLocalConnect('FlashA'); lc_flasha.setSecurity(5); lc_flasha.listen('rec_text', function (_text:String) { if (_text) { txt.text = txt.text+_text+"\n"; } }); lc_flasha.onLoad(function () { show_ff(true); status.text = "Conneted"; }); lc_flasha.onUnload(function () { show_ff(false); status.text = "Disconnected"; }); lc_flasha.onHeartBeat(function () { bumper.gotoAndPlay(1); }); lc_flasha.heartbeat('FlashB'); Submit.addEventListener(MouseEvent.MOUSE_UP, function() { if (text.text) { lc_flasha.send('FlashB', 'rec_text', text.text); text.text = ""; } }); function show_ff(vis:Boolean) { text.visible = vis; txt.visible = vis; Submit.visible = vis; a.visible = vis; b.visible = vis; }

Instanznamen und dazu gehörige Objekte:
asLocalConnect Name = FlashA
lc_flasha = asLocalConnect Objekt
text = TextInput
txt = TextArea
Submit = Button
a und b = Text über TextInput und TextArea

Flash B:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; show_ff(false); status.text = "Loading..."; var lc_flashb:asLocalConnect = new asLocalConnect('FlashB'); lc_flashb.setSecurity(5); lc_flashb.listen('rec_text', function (_text:String) { if (_text) { txt.text = txt.text+_text+"\n"; } }); lc_flashb.onLoad(function () { show_ff(true); status.text = "Conneted"; }); lc_flashb.onUnload(function () { show_ff(false); status.text = "Disconnected"; }); lc_flashb.onHeartBeat(function () { bumper.gotoAndPlay(1); }); lc_flashb.heartbeat('FlashA'); Submit.addEventListener(MouseEvent.MOUSE_UP, function() { if (text.text) { lc_flashb.send('FlashA', 'rec_text', text.text); text.text = ""; } }); function show_ff(vis:Boolean) { text.visible = vis; txt.visible = vis; Submit.visible = vis; a.visible = vis; b.visible = vis; }

Instanznamen und dazu gehörige Objekte:
asLocalConnect Name = FlashB
lc_flashb = asLocalConnect Objekt
text = TextInput
txt = TextArea
Submit = Button
a und b = Text über TextInput und TextArea

Synchronisation mit 9 Flashdateien und Broadcast Funktion

In diesem Beispielen werden 9 Flashdateien gleichzeitig geladen und von einer Master Flashdatei gesteuert.
Hier wird die Funktion "broadcast" verwendet, hiermit kann sehr einfach an alle beteiligten Flashdatei eine Anfrage geschickt werden, in diesem Fall um dem Counter zu erhöhen.
Der grüne Counter ist hierbei der Master und alle anderen roten Counter sind Slaves.

ActionScript Code

Master:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var lc_master:asLocalConnect = new asLocalConnect('Master'); lc_master.setSecurity(5); lc_master.verbose(5); lc_master.onLoad(function () { lc_master.broadcast('counter',txt_counter.text); setInterval(counter, 500); }); function counter() { lc_master.broadcast('counter',++txt_counter.text); } lc_master.heartbeat('Master','Slave_1','Slave_2','Slave_3','Slave_4','Slave_5','Slave_6','Slave_7','Slave_8');

Der Master macht einen Heartbeat mit allen anderen Flashdateien und erst wenn diese verfügbar sind, fängt er an einen Broadcast Befehl abzuschicken.
Wenn diese Seite in einem anderen Browser geladen wird, synchronisieren sich in diesem neuen Fenster die Flashdateien unabhängig vom ersten Fenster.
Diese Beispiel zeigt am besten die Channel Funktion von asLocalConnect um mögliche Fehler zu vermeiden.

Slaves:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var Counter=0; var lc_slave:asLocalConnect = new asLocalConnect('Slave_1'); lc_slave.setSecurity(5); function setCounter(count:Number) { if (count) { txt_counter.text = count; } } lc_slave.listen('counter',setCounter); lc_slave.heartbeat('Master','Slave_1','Slave_2','Slave_3','Slave_4','Slave_5','Slave_6','Slave_7','Slave_8');

Hier sieht man den ActionScript Code für die Slave 1 Datei, es wird also nur der asLocalConnect Namen geändert, ansonsten haben alle Slave Dateien den selben ActionScript Code.

Integration in bereits vorhandenen Projekte oder Flashdateien

asLocalConnect ist auf Grund der Funktionen nicht mit normalen LocalConnection kompatible, jedoch ist es relative einfach die Features von asLocalConnect auch in existierende Flashdateien zu integrieren.
Die meiste Probleme bei LocalConnection besteht darin das eine LocalConnection nicht zu stande kommt, da die Flashdateien nicht auf einander warten, dies kann mit asLocalConnect behoben werden.
Hierzu wird einfach ein neues und leeres erstes Frame eingefügt und in diesem neuen Frame wird asLocalConnect verwenden mit Heartbeat. Sobald sich beide Flashdateien gefunden haben, springen diese auf Frame 2 um.
Man kann hier natürlich auch sagen wenn die Verbindung wieder weg ist springt diese wieder auf Frame 1 zurück und wartet.

Das folgende Beispiel zeigt genau diesen Weg, durch asLocalConnect wird sichergestellt das beide Flashdateien vorhanden sind und somit sollte der restliche Code mit asLocalConnection ohne Probleme funktionieren.
Es muss nur darauf geachtet werden das dies in der Flashdatei gemacht wird, welche auch die asLocalConnection ausführt.
Somit hat es wenig Sinn wenn dies eine Parent Flashdatei ist mit mehren Childs, dies in der Parent Flashdatei zu hinterlegen. Hier sollte dann dies in dem Child hinterlegt werden, welches die asLocalConnection enthält.

ActionScript Code

Flash A:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var lc_flasha:asLocalConnect = new asLocalConnect('flasha'); lc_flasha.setSecurity(5); lc_flasha.onLoad(function () { mc_child.gotoAndPlay(2); }); lc_flasha.heartbeat('flashb');

Diese Zeilen sorgen wie gesagt, das asLocalConnect einen HeartBeat mit "flashb" macht, sobald diese verfügbar ist spielt der MovieClip "mc_child" ab.
Hier können natürlich auch andere Anweisungen geben werden.

Flash B:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var lc_flashb:asLocalConnect = new asLocalConnect('flashb'); lc_flashb.setSecurity(5); lc_flashb.onLoad(function () { mc_child.gotoAndPlay(2); }); lc_flashb.heartbeat('flasha');

Hiermit wird dann auch ein Heartbeat mit "flasha" gestartet, somit ist sichergestellt da beide Flashdateien geladen sind und die nachfolgenden normalen LocalConnections auch ohne Probleme ausgeführt werden.
Natürlich sollte asLocalConnect nicht nur als eine Art "Preloader" verwendet werden, da es wie gesagt einige interessante Features mehr hat die hier leider nicht abgedeckt werden.
Würde z.B: eine normale Flashdatei mit LocalConnection in mehreren Fenster gleichzeitig geöffnet, kommen sich die LocalConnections in die Quere.
Dies kann bei asLocalConnect nicht passieren, hier können die Flashdateien bis zu 10 mal geöffnet werden ohne das diese sich gegenseitig stören.

Millisekunden genaue Synchronisation von mehreren Flashdateien

asLocalConnect 0.5 und höher bieten die Möglichkeit an mehrere Flashdateien mit einer Differenz von -10ms/+10ms zu synchronisieren.
Hierbei werden verschiedene Tricks und Timer verwendet, auch das synchrone Ausführen von Befehlen ist so möglich.

ActionScript Code

Master:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; // Init mc_demo.stop(); btn_stop.visible = false; btn_start.visible = false; // Connection Stuff var master=new asLocalConnect('master'); addChild(master); master.setSecurity(5); master.verbose(3); master.onSync(function() { txt_info.text = "Timer started at " + (new Date).getTime(); mc_demo.gotoAndPlay(1); }); master.onLoad(function() { btn_start.visible = true; btn_stop.visible = true; }); master.onUnload(function() { btn_start.visible = false; btn_stop.visible = false; }); master.sync('master','slave1','slave2'); // Functions for Listenter function syn_start() { txt_info.text = "Syn Start recieved at " + (new Date).getTime(); mc_demo.gotoAndPlay(1); } function syn_stop() { txt_info.text = "Syn Stop recieved at " + (new Date).getTime(); mc_demo.gotoAndStop(1); } master.listen("syn_start", syn_start); master.listen("syn_stop", syn_stop); // Button Event btn_start.addEventListener(MouseEvent.MOUSE_UP, function() { txt_info.text = "Please wait... send syn_start..."; master.sync_broadcast(true, "syn_start"); }); btn_stop.addEventListener(MouseEvent.MOUSE_UP, function() { txt_info.text = "Please wait... send syn_stop..."; master.sync_broadcast(true, "syn_stop"); });

Für die Synchronisation ist addChild(...) sehr wichtig, dadurch erlagt asLocalConnect den Zugriff auf die Stage und kann weitere Optimierungen durchführen.
Durch master.onLoad(...) und master.Unload(...) werden die entsprechenden Button ein- und ausgeblendet je nachdem ob eine Synchronisation zu den anderen Flashdateien besteht.
Hier wird zuerst mit master.onSync ein Event definiert, welches zum Zeitpunkt der Synchronisierung ausgeführt wird. Dieses Event wird fast zeitgleich bei allen Flashdateien ausgeführt.
Anschließend wird mit master.sync die eigentlichen Synchronisation gestartet, der erste Parameter ist der Master die restlichen Parameter die beiden anderen Flashdateien.
Es ist wichtig das immer nur ein Master existiert der sozusagen das Timming für die Synchronisation vorgibt.
Anschließend werden noch mit master.listen(...) Listener definiert, die später für einen synchronisierten Broadcast verwendet werden können.
Der synchronisierte Broadcast wird mit master.sync_broadcast(...) ausgeführt, der erste Parameter legt fest ob der Master die Funktion auch ausführen soll oder nicht.
In diesem Fall soll der Master die Funktion auch ausführen also wird dies auf "true" gesetzt.

Instanznamen und dazu gehörige Objekte:
asLocalConnect Name = master
master = asLocalConnect Objekt
mc_demo = Beispiel MovieClip
btn_start = Button
btn_stop = Button
txt_info = Textfeld für Infos

ActionScript Code

Slave 1:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; // Init mc_demo.stop(); // Connection Stuff var slave=new asLocalConnect('slave1'); addChild(slave); slave.setSecurity(5); slave.verbose(3); slave.onSync(function() { txt_info.text = "Timer started at " + (new Date).getTime(); mc_demo.gotoAndPlay(1); }); slave.sync('master','slave1','slave2'); // Functions for Listenter function syn_start() { txt_info.text = "Syn Start recieved at " + (new Date).getTime(); mc_demo.gotoAndPlay(1); } function syn_stop() { txt_info.text = "Syn Stop recieved at " + (new Date).getTime(); mc_demo.gotoAndStop(1); } slave.listen("syn_start", syn_start); slave.listen("syn_stop", syn_stop);

Im Grunde unterscheidet sich der ActionScript Code nicht sehr von dem des Master, bis auf fehlende Buttons und andere Connectionnamen.
Instanznamen und dazu gehörige Objekte:
asLocalConnect Name = slave1
slave = asLocalConnect Objekt
mc_demo = Beispiel MovieClip
txt_info = Textfeld für Infos

ActionScript Code

Slave 2:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; // Init mc_demo.stop(); // Connection Stuff var slave=new asLocalConnect('slave2'); addChild(slave); slave.setSecurity(5); slave.verbose(3); slave.onSync(function() { txt_info.text = "Timer started at " + (new Date).getTime(); mc_demo.gotoAndPlay(1); }); slave.sync('master','slave1','slave2'); // Functions for Listenter function syn_start() { txt_info.text = "Syn Start recieved at " + (new Date).getTime(); mc_demo.gotoAndPlay(1); } function syn_stop(... args):void { txt_info.text = "Syn Stop recieved at " + (new Date).getTime(); mc_demo.gotoAndStop(1); } slave.listen("syn_start", syn_start); slave.listen("syn_stop", syn_stop);

Instanznamen und dazu gehörige Objekte:
asLocalConnect Name = slave2
slave = asLocalConnect Objekt
mc_demo = Beispiel MovieClip
txt_info = Textfeld für Infos

Übersicht über asLocalConnect

Anbei eine ausführliche Übersicht, welche alle Funktionen, Ereignisse und Konstruktoren von asLocalConnect zeigen. Weiter unten wird dann genauer auf die einzelnen Punkte eingegangen, welche Möglichkeiten es gibt.

Übersicht über Konstruktoren

SyntaxBeschreibung
asLocalConnect(connectionName:String)Erstellt ein asLocalConnect-Objekt. Falls ein connectionName angegeben wird, wird außerdem eine Verbindung zu diesem hergestellt.

Übersicht über Methoden

SyntaxBeschreibung
connect(connectionName:String) : BooleanBereitet ein LocalConnection-Objekt auf den Empfang von Befehlen eines LocalConnection.send()-Befehls vor (das so genannte sendende LocalConnection-Objekt).
listen(listnerName:String, functionName:Function) : voidFügt eine Funktion zum LocalConnection Objekt hinzu, welches dann über LocalConnection ausgeführt werden kann.
allowDomain(domain:String) : voidPrüft ob die übergebene Domain bereits in der allowDomain Liste ist, falls nicht wird diese hinzugefügt.
setSecurity(securityLevel:Number) : voidSetzt das Security Level welches für die LocalConnection gelten soll, insgesamt gibt es hier 8 Stufen.
send(connectionName:String, methodName:String, args:Object) : voidRuft die Methode "method" für eine mit dem Befehl LocalConnection.connect( connectionName ) geöffnete Verbindung auf (das so genannte empfangende LocalConnection-Objekt).
broadcast(methodName:String, args:Object) : BooleanRuft die Methode method für alle derzeit geöffnete Verbindungen auf (die so genannte empfangenden LocalConnection-Objekte).
sync_broadcast(selfExecute:String, methodName:String, args:Object) : voidGleiche Funktion wie broadcast aber der Befehl wird synchronisiert ausgeführt.
domain() : StringGibt die Domain der LocalConnection zurück.
sync(MasterConnectionName:String, connectionNames) : voidStartet die Synchronisation für ausgewählte Flashdateien.
heartbeat(connectionNames) : voidFügt einen Heartbeat für die übergebenen connectionNames hinzu.
heartbeatstatus(connectionName:String) : BooleanGibt den derzeitigen Status für den übergebenen connectionName zurück. Falls kein Wert übergeben wird, wird hier der Status für alle connectionNames zurück gegeben.
info() : voidStartet eine "trace" Ausgabe mit den LocalConnection Name, LocalConnection Channel und dessen Status.
close() : voidBeendet die LocalConnection und auch ggf. den Heartbeat.
verbose(verboseLevel:Number) : voidGibt an wie detailiert die entsprechenden Meldung von asLocalConnect sein sollen.

Übersicht über Ereignisse

EventBeschreibung
onLoad(onLoad_function:Function) : voidWird aufgerufen, wenn alle LocalConnections verfügbar sind. (HeartBeat)
onUnload(onUnload_function:Function) : voidWird aufgerufen, wenn die LocalConnection die Verbindung verliert.
onSync(onSync_function:Function) : voidWird zeitgleich bei allen synchronisierten Flashdateien aufgerufen, wenn alle LocalConnection synchronisiert sind.
onHeartBeat(HeartBeat_function:Function) : void Wird bei jedem gesendeten Heartbeat aufgerufen.
onStatus(onStatus_function:Function) : voidWird aufgerufen, nachdem feststeht ob ein .send(...) erfolgreich war oder nicht.

Konstruktoren

asLocalConnect(connectionName:String)

Hiermit wird ein asLocalConnect Objekt erstellt und einer Variable zugewiesen, dies ist nötig um später darauf zugreifen zu können.
Alternativ kann auch ein ConnectionName übergeben werden. Falls dieser übergeben wird, baut asLocalConnect automatisch eine Verbindung mit diesen Verbindungsnamen auf, so das ein späteres connect(...) nicht nötig ist.

ActionScript Code:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var lc_Flash123:asLocalConnect = new asLocalConnect('Flash123');

Hier wird das LocalConnection Objekt mit den Namen "lc_Flash123" erstellt und dieses hat den Verbindungsnamen "Flash123".
Bitte beachten das der Verbindungsname mind. 4 Zeichen lang sein muss ein "_" wird automatisch von asLocalConnect angefügt, jedoch erkennt asLocalConnect ob der Name mit oder ohne führenden "_" übergeben worden ist.
Auch kann die Verbindung mit den Namen angesprochen werden welcher übergeben bzw. verwendet wird, auch wenn intern ein anderer Name verwendet wird.

Methoden

connect(connectionName:String) : Boolean

Mit connect wird der Verbindungsnamen festgelegt den diese Verbindung hat, sollte dieser nicht schon übergeben worden sein, kann dieser mit connect festgelegt werden.

ActionScript Code:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var lc_Flash123:asLocalConnect = new asLocalConnect(); lc_Flash123.connect('Flash123');

Dieses Beispiel macht im Endeffekt genau das selbe wie das obere Beispiel, nur das hier zuerst das Objekt definiert wird und dann eine Verbindung aufgebaut wird.

listen(listnerName:String, functionName:Function) : void

Hiermit wird festgelegt welcher "Listener" welcher Function zugeordnet ist, diese Function wird bei einer entsprechenden Anfragen von anderen asLocalConnect Objekten ausgeführt.

ActionScript Code:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var lc_Flash123:asLocalConnect = new asLocalConnect('Flash123'); // Beispiel 1 lc_Flash123.listen('hello',function () { trace('Hello World'); }); // Beispiel 2 function helloWorld() { trace('Hello World'); } lc_Flash123.listen('world',helloWorld);

In diesem Beispiel wird trace('Hello World'); ausgeführt wenn ein asLocalConnect Object eine Anfrage an Flash123 sendet die den Namen hello bzw. world hat.

allowDomain(domain:String) : void

Hier können Domains übergeben werden über welche asLocalConnect kommunizieren darf, bitte hierbei auch auf die richtige Einstellung von setSecurity achten.
Es können Wildcards übergeben werden, jedoch nur wenn setSecurity auf 6 oder niedriger steht.

ActionScript Code:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var lc_Flash123:asLocalConnect = new asLocalConnect('Flash123'); lc_Flash123.setSecurity(6); lc_Flash123.allowDomain('reifanhp.de'); lc_Flash123.allowDomain('animearchive.de');

In diesem Beispiel werden die Domains reifanhp.de und animearchive.de zu der AllowDomain Liste hinzugefügt, Flashdateien von dieser Domain könnten also mit der Flashdatei aus dem Beispiel kommunizieren.

setSecurity(securityLevel:Number) : void

Bei asLocalConnect gibt es ein vorgegebenes Security Modell, das je nach Sicherheits Level verschieden reagiert.
Aufgrund der umfangreichen Änderung in ActionScript 3 ist es nicht mögliche alle früheren Sicherheits Level wieder zu spiegeln.

Sicherheits LevelBeschreibung
1Keine Sicherheits, alle Domains werden erlaubt, bitte nur zum Testen verwenden !
2Noch keine Verwendung. Nicht benützten !
3Noch keine Verwendung. Nicht benützten !
4Noch keine Verwendung. Nicht benützten !
5Erlaubt alle Domains die per AllowDomain festgelegt worden sind und die selbe Domain in der die Flashdatei liegt. Jedoch werde zusätzliche Beschränkungen für lokale Tests aufgehoben. Diese Stufe is also ideal wenn Ihr eure Flashdatei offline direkt auf den PC testen wollt.
6(Standard) Erlaubt alle Domains die per AllowDomain festgelegt worden sind und die selbe Domain in der die Flashdatei liegt.
7Erlaubt nur Domains die per AllowDomain festgelegt worden sind und ignoriert die gleiche Domain falls diese nicht in AllowDomain vorhanden ist !
8Erlaubt nur die selbe Domain in der die Flashdatei liegt und ignoriert Domains die per AllowDomain übergeben worden sind.
9Offline Modus, erlaubt keine Verbindung
ActionScript Code:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var lc_Flash123:asLocalConnect = new asLocalConnect('Flash123'); lc_Flash123.setSecurity(7); lc_Flash123.allowDomain('reifanhp.de'); lc_Flash123.allowDomain('animearchive.de');

In diesem Beispiel dürfen nur Flashdateien von der Domain reifanhp.de und animearchive.de eine Verbindung zu dieser Flashdatei aufbauen.
Sollte eine Flashdatei von der selben Domain z.B: flash.area-network.de versuchen eine Verbindung aufzubauen würden diese ignoriert werden.

send(connectionName:String, methodName:String, args:Object) : void

Sendet Daten an den angegeben Verbindungsnamen an die angegebene Methode (Listener) welcher über listen festgelegt worden ist.

ActionScript Code:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var lc_Flash123:asLocalConnect = new asLocalConnect('Flash123'); lc_Flash321.send('Flash123','hello','evtl. Parameter');

In diesem Beispiel wird an Flash123 die Aufforderung geschickt die Methode hello auszuführen, welche im Beispiel von listen ein trace mit der Ausgabe "Hello World" startet.

broadcast(methodName:String, args:Object) : void

Sendet Daten an alle per HeartBeat erreichte Verbindungsnamen und an die angegebene Methode (Listener) welcher über listen festgelegt worden ist.

ActionScript Code:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var lc_master:asLocalConnect = new asLocalConnect('Master'); lc_master.onLoad(function () { lc_master.broadcast('counter', Counter); }); lc_master.heartbeat('slave_1','slave_2','slave_3','slave_4','slave_5','slave_6','slave_7','slave_8');

Dieses Beispiel wurde im vorherigen Kapitel genauer erklärt.

sync_broadcast(methodName:String, args:Object) : void

Sendet Daten an alle per Sync erreichbaren Verbindungsnamen und an die angegebene Methode (Listener) welcher über listen festgelegt worden ist.
Das besondere hierbei ist, das die entsprechenden Daten bzw. Befehle zeitgleich bei allen Flashdateien ausgeführt werden, die mit sync synchronisiert worden sind.

ActionScript Code:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var lc_master:asLocalConnect = new asLocalConnect('Master'); addChild(lc_master); lc_master.onSync(function () { lc_master.sync_broadcast('counter', Counter); }); lc_master.sync('Master','Slave1','Slave2');

Der Befehl normale Broadcast "broadcast(...)" kann natürlich auch für LocalConnections verwendet werden die mit sync synchronisiert worden sind.

domain() : String

Gibt die derzeitige Domain der LocalConnection zurück.

ActionScript Code:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var lc_Flash123:asLocalConnect = new asLocalConnect('Flash123'); trace('Local Connection Domain: '+ lc_Flash321.domain());

Hier wird per trace die Domain der LocalConnection zurück gegeben.

heartbeat(connectionNames:Array) : void

Fügt einen Heartbeat für die übergebenen connectionNames hinzu, dieser Heartbeat sollte immer verwendet werden damit die LocalConnection sich gegenseitig abfragen.
Dies wird durch geschicktes Timing so Prozessor schonend gemacht, das dieses keine große Auswirkung auf die CPU Last hat.
Viele Methoden wie broadcast benötigen einen HeartBeat damit dieser einwandfrei funktioniert.

ActionScript Code:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var lc_master:asLocalConnect = new asLocalConnect('Master'); lc_master.onLoad(function () { lc_master.broadcast('counter', Counter); }); lc_master.heartbeat('slave_1','slave_2','slave_3','slave_4','slave_5','slave_6','slave_7','slave_8');

Hier wird ein HeartBeat mit slave_1, slave_2, slave_3, slave_4, slave_5, slave_6 , slave_7, slave_8 gestartet, somit weiß der Master wenn alle verfügbar sind oder einer dieser asLocalConnect die Verbindung verloren hat.
Bitte darauf achten das jedes asLocalConnect Object einen Heartbeat zu den anderen asLocalConnect Objekten hat, zwischen welchem Daten ausgetauscht werden.
In früheren Version war es nötig den eigenen ConnectionName nicht zu übergeben, jedoch erkennt asLocalConnect ob dieser übergeben worden ist oder nicht so das es in der Version keine Rolle mehr spielt.
Für eine bessere Übersicht empfehle ich jedoch, auch den eigenen Connection Namen anzugeben. So sieht die Zeile für alle Flashdateien gleich aus was die Übersicht erleichtert.

sync(MasterConnectionName:String, connectionNames) : void

Startet die Synchronisation für die übergebenen connectionNames, hierbei wird versucht die Framerate der Flashdateien so abzugleichen das die Frames zur selben Zeit statt finden.
Hier sollte sichergestellt werden das bis die Synchronisation angezeigt wird keine Framerate abhängigen Animation abgespielt werden.
Die Flashdatei sollte als erst mit Animationen beginnen, wenn die Synchronisation fertig ist, dies dauert in der Regel 2-3 Sekunden.

ActionScript Code:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var lc_master:asLocalConnect = new asLocalConnect('Master'); addChild(lc_master); lc_master.onSync(function() { txt_info.text = "Timer started at " + (new Date).getTime(); mc_demo.gotoAndPlay(1); }); lc_master.sync('Master','Child1','Child2');

Der Befehl addChild(lc_master) ist für Optimierungen der Framerate nötig, wird dieser Befehl nicht verwendet so werden wichtige Optimierungen ausgelassen.
Der erste Parameter entspricht immer den Master Connection Namen, dieser muss in allen anderen Flashdateien gleich sein.
Die restlichen Parameter geben an welche anderen Connection Namen noch für diese Verbindungen benötigt werden.
Grundsätzlich kann der eigene ConnectionNamen weg gelassen werden, jedoch erkennt asLocalConnect selbstständig ob dieser weggelassen worden ist oder nicht.
Für eine bessere Übersicht empfehle ich jedoch, auch den eigenen Connection Namen anzugeben. So sieht die Zeile für alle Flashdateien gleich aus was die Übersicht erleichtert.

heartbeatstatus(connectionName:String) : Boolean

Gibt den derzeitigen Status für den übergebenen connectionName zurück. Falls kein Wert übergeben wird, wird hier der Status für alle connectionNames zurück gegeben.

ActionScript Code:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var lc_master:asLocalConnect = new asLocalConnect('Master'); lc_master.heartbeat('slave_1','slave_2','slave_3','slave_4','slave_5','slave_6','slave_7','slave_8'); // Status von 'slave_1' abfragen lc_master.heartbeatstatus('slave_1'); // Allgemeinen Status alle Verbindungen abfragen lc_master.heartbeatstatus();

Hier wird per trace und als Rückgabe-wert der Status des Heartbeats zurück gegeben.

info() : void

Startet eine "trace" Ausgabe mit den LocalConnection Name, LocalConnection Channel und dessen Status. Wobei mit Status hier nur gemeint ist ob dieses Objekt einen Verbindungsnamen hat zu welchen es verbunden ist.

ActionScript Code:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var lc_master:asLocalConnect = new asLocalConnect('Master'); lc_master.info();

Der Channel gibt an wie viele Verbindungen mit den selben Namen derzeit auf diesen PC gestartet sind. Dies stellt sicher das die selben Flashdateien in mehreren Browser Fenster ungestört kommunizieren können.

close() : void

Beendet die LocalConnection und auch ggf. den Heartbeat.

ActionScript Code:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var lc_master:asLocalConnect = new asLocalConnect('Master'); // Status vor close() abfragen lc_master.info(); // Verbindung schließen trace('- - -'); lc_master.close(); // Status erneut abfragen lc_master.info();

Hier wird die Verbindung mit den Namen Master beendet.

verbose() : void

Gibt an wie ausführlich die Rückmeldungen von asLocalConnect sein sollen.
Die Rückmeldungen werden über trace() gesendet und sind somit auch mit dem Debugplayer von Flash einsehbar.
Wenn Ihr natürlich trace() beim exportieren in eine SWF Datei ausschaltet, so werden diese Meldungen nicht angezeigt.

Verbose LevelBeschreibung
0ERROR: Zeigt alle kritischen Fehlermeldungen.
1WARNING: Zeigt alle Fehlermeldungen und weist auf evt. Fehler hin.
2INFO: Zeigt zusätzlich Informationen an, welche Befehle übergeben worden sind.
3DEBUG: Zeigt zusätzlich zu Fehlermeldungen und Hinweisen zusätzliche Informationen an was asLocalConnect derzeit macht.
4-: Noch keine verwendung.
5ALL: Zeigt alle Meldungen von asLocalConnect.
ActionScript Code:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var lc_master:asLocalConnect = new asLocalConnect('Master'); lc_master.verbose(6);

Hier wird das Verbose Level auf 6 gestellt.

Ereignisse

Die Ereignisse sind die Hauptbestandteile von asLocalConnect mit Hilfe dieser Ereignisse ist es möglich genau zu steuern wie sich die Flashdatei verhalten solle wenn alle anderen asLocalConnect Objekte vorhanden sind oder falls hier die Verbindung wieder getrennt wird.

onLoad(onLoad_function:Function) : void

Dieses Ereignis wird aufgerufen sobald alle Verbindungen die über heartbeat angegeben worden sind verfügbar sind.
Man sollte also hier Befehle hinterlegen die ausgeführt werden sollen wenn alle Objekte vorhanden sind.

ActionScript Code:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var lc_flasha:asLocalConnect = new asLocalConnect('FlashA'); lc_flasha.onLoad(function () { show_ff(true); lc_flasha.send('FlashB', 'rec_text', "Hello World"); status = "Conneted"; }); lc_flasha.heartbeat('FlashB');

Sobald also FlashB verfügbar ist, wird in FlashA die Function show_ff(true) ausgeführt und es wird "Hello World" an FlashB geschickt.
Außerdem wird status auf "Connected" gesetzt, da man hier davon ausgehen kann das die Verbindung besteht.

onUnload(onUnload_function:Function) : void

Dieser Ereignis wird aufgerufen falls die Verbindung nach einer erfolgreichen Verbindung wieder beendet wird.
Damit kann man sehr einfach feststellen wenn ein User die andere Flashdatei geschlossen hat.

ActionScript Code:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var lc_flasha:asLocalConnect = new asLocalConnect('FlashA'); lc_flasha.onUnload(function () { show_ff(false); status = "Disconnected"; }); lc_flasha.heartbeat('FlashB');

Wenn FlashA also die Verbindung zu FlashB verliert wird die Function show_ff(false) ausgeführt und der Status wird auf "Disconnected" gestellt.

onSync(onSync_function:Function) : void

Dieses Ereignis wird synchron ausgeführt wenn sich alle Flashdateien synchronisiert haben.
Pro Verbindung sollte hier maximale Abweichungen von ca. -10ms/+10ms entstehen.

ActionScript Code:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var lc_flasha:asLocalConnect = new asLocalConnect('Master'); addChild(lc_flasha); lc_flasha.onSync(function () { mc_demo.gotoAndPlay(1); }); lc_master.sync('Master','Slave');

Hier wird ein entsprechender MovieClip mc_demo synchron abgespielt sobald beide Flashdateien geladen und synchronisiert sind.
Dieser Vorgang kann je nachdem bis zu 5 Sekunden dauern.

onHeartBeat(HeartBeat_function:Function) : void

Dieser Ereignis wird bei jedem Heartbeat aufgerufen, wie oft ein Heartbeat erfolgt wird anhand der zu überwachenden asLocalConnect Objekten festgelegt.
Man kann über dieses Ereignis einen MovieClip von vorne starten lassen, welcher dann den Heartbeat grafisch anzeigt.

ActionScript Code:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var lc_flasha:asLocalConnect = new asLocalConnect('FlashA'); lc_flasha.onHeartBeat(function () { bumper.gotoAndPlay(1); }); lc_flasha.heartbeat('FlashB');

In diesem Beispiel wird bei jedem HeartBeat der MovieClip Bumper von vorne gestartet.

onStatus(onStatus_function:Function) : void

Dieser Ereignis wird ausgeführt sobald feststeht ob ein send(...) erfolgreich war oder nicht.
An die Function wir das StatusEvent übergeben so das hier nochmal eine genaue Prüfung vorgenohmen werden kann.

ActionScript Code:
/* asLocalConnect Example from Markus Bordihn (http://markusbordihn.de) */ import de.markusbordihn.flash.as3.asLocalConnect; var lc_flasha:asLocalConnect = new asLocalConnect('FlashA'); lc_flasha.onStatus(function (e:StatusEvent) { trace('Result' + (e.level === 'status') ? 'succeeded' : 'failed'); }); lc_flasha.send('FlashB','test','123');

In diesem Beispiel wird anhand des Event Levels geprüft ob der Befehlt erfolgreich war oder nicht.
Ein Event Level "status" bedeutet das die Verbindung erfolgreich war.