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
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...
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.
asLocalConnect wird auf SourceForge gehostet auf dieser Seite kann die aktuelle Version heruntergeladen werden und Fehler bzw. Verbesserungen eingereicht werden.
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.

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
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
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.
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.
/*
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
/*
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
/*
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.
/*
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
/*
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.
/*
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
/*
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
/*
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
/*
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
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
| Syntax | Beschreibung | ||
|---|---|---|---|
asLocalConnect(connectionName:String) | Erstellt ein asLocalConnect-Objekt. Falls ein connectionName angegeben wird, wird außerdem eine Verbindung zu diesem hergestellt. | ||
Übersicht über Methoden
| Syntax | Beschreibung | ||
|---|---|---|---|
connect(connectionName:String) : Boolean | Bereitet ein LocalConnection-Objekt auf den Empfang von Befehlen eines LocalConnection.send()-Befehls vor (das so genannte sendende LocalConnection-Objekt). | ||
listen(listnerName:String, functionName:Function) : void | Fügt eine Funktion zum LocalConnection Objekt hinzu, welches dann über LocalConnection ausgeführt werden kann. | ||
allowDomain(domain:String) : void | Prüft ob die übergebene Domain bereits in der allowDomain Liste ist, falls nicht wird diese hinzugefügt. | ||
setSecurity(securityLevel:Number) : void | Setzt das Security Level welches für die LocalConnection gelten soll, insgesamt gibt es hier 8 Stufen. | ||
send(connectionName:String, methodName:String, args:Object) : void | Ruft 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) : Boolean | Ruft 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) : void | Gleiche Funktion wie broadcast aber der Befehl wird synchronisiert ausgeführt. | ||
domain() : String | Gibt die Domain der LocalConnection zurück. | ||
sync(MasterConnectionName:String, connectionNames) : void | Startet die Synchronisation für ausgewählte Flashdateien. | ||
heartbeat(connectionNames) : void | Fügt einen Heartbeat für die übergebenen connectionNames hinzu. | ||
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. | ||
info() : void | Startet eine "trace" Ausgabe mit den LocalConnection Name, LocalConnection Channel und dessen Status. | ||
close() : void | Beendet die LocalConnection und auch ggf. den Heartbeat. | ||
verbose(verboseLevel:Number) : void | Gibt an wie detailiert die entsprechenden Meldung von asLocalConnect sein sollen. | ||
Übersicht über Ereignisse
| Event | Beschreibung | ||
|---|---|---|---|
onLoad(onLoad_function:Function) : void | Wird aufgerufen, wenn alle LocalConnections verfügbar sind. (HeartBeat) | ||
onUnload(onUnload_function:Function) : void | Wird aufgerufen, wenn die LocalConnection die Verbindung verliert. | ||
onSync(onSync_function:Function) : void | Wird 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) : void | Wird aufgerufen, nachdem feststeht ob ein .send(...) erfolgreich war oder nicht. | ||
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.
/*
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.
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.
/*
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.
/*
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.
/*
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 Level | Beschreibung | ||
|---|---|---|---|
| 1 | Keine Sicherheits, alle Domains werden erlaubt, bitte nur zum Testen verwenden ! | ||
| 2 | Noch keine Verwendung. Nicht benützten ! | ||
| 3 | Noch keine Verwendung. Nicht benützten ! | ||
| 4 | Noch keine Verwendung. Nicht benützten ! | ||
| 5 | Erlaubt 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. | ||
| 7 | Erlaubt nur Domains die per AllowDomain festgelegt worden sind und ignoriert die gleiche Domain falls diese nicht in AllowDomain vorhanden ist ! | ||
| 8 | Erlaubt nur die selbe Domain in der die Flashdatei liegt und ignoriert Domains die per AllowDomain übergeben worden sind. | ||
| 9 | Offline Modus, erlaubt keine Verbindung | ||
/*
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.
/*
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.
/*
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.
/*
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.
/*
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.
/*
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.
/*
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.
/*
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.
/*
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.
/*
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 Level | Beschreibung | ||
|---|---|---|---|
| 0 | ERROR: Zeigt alle kritischen Fehlermeldungen. | ||
| 1 | WARNING: Zeigt alle Fehlermeldungen und weist auf evt. Fehler hin. | ||
| 2 | INFO: Zeigt zusätzlich Informationen an, welche Befehle übergeben worden sind. | ||
| 3 | DEBUG: Zeigt zusätzlich zu Fehlermeldungen und Hinweisen zusätzliche Informationen an was asLocalConnect derzeit macht. | ||
| 4 | -: Noch keine verwendung. | ||
| 5 | ALL: Zeigt alle Meldungen von asLocalConnect. | ||
/*
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.
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.
/*
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.
/*
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.
/*
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.
/*
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.
/*
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.
