Ihr wollt zwei Flash synchronisieren? Ihr bekommt einen Fehler #2000: Kein aktiver Sicherheitskontext? Ihr verzweifelt, weil der Fehler sinnlos erscheint? Ihr nutzt Adobe Flash CS5.5?
Die Lösung:
CS5.5 ist Schuld und hier kommt die Lösung (getestet in CS5)
Sender:
import flash.net.LocalConnection; import flash.events.StatusEvent; animation.stop(); var sender:LocalConnection= new LocalConnection(); sender = new LocalConnection(); sender.addEventListener(StatusEvent.STATUS ,error); loaded(); function error(e:StatusEvent):void { if (e.level == "error") { loaded(); } if (e.level == "status") { animation.play(); } } function loaded():void { if (root.loaderInfo.parameters.rnd) { sender.send("UniqueConnectionName" + root.loaderInfo.parameters.rnd, "startAnimation"); } else { sender.send("UniqueConnectionName","startAnimation"); } }
und Empfänger
import flash.net.LocalConnection; animation.stop(); var empfang:LocalConnection = new LocalConnection(); if (root.loaderInfo.parameters.rnd) { empfang.connect("UniqueConnectionName" + root.loaderInfo.parameters.rnd); } else { empfang.connect("UniqueConnectionName"); } var clientObj:Object = new Object(); clientObj.startAnimation = function():void{ animation.play(); }; empfang.client = clientObj;
Wesentlich aufwändiger: aber was CS5.5 vehement verschweigt, CS5 jedoch offenbart. Nicht der Fehler #2000 ist Schuld sondern:
Error #2044: Unhandled AsyncErrorEvent:. text=Error #2095: flash.net.NetConnection was unable to invoke callback startAnimation. error=ReferenceError: Error #1069: Property onBWDone not found on flash.net.NetConnection and there is no default value.
Daraus ergaben sich nun die oben implementierten Ansätze, die schlussendlich zum Erfolg führten:
Sender:
- Wir lauschen solange bis der Empfänger geladen ist „function error()“
- Dafür implementieren wir einen Listener (Zeile 8)
- Um eine eindeutige Zuordnung der Flashs zu gewährleisten, schauen wir ob es einen Parameter „rnd“ (Zeile 25) beim Aufruf gibt. Ansonsten auf gut Glück trotzdem laden
Empfänger:
- Wieder wird der Parameter „rnd“ abgefragt (Zeile 6)
- WICHTIG: Das ganze muss in ein Objekt gepackt werden. Es funktioniert nicht als Funktion oder anonyme Funktion
- Wir weißen das Objekt als Client zu
Das Problem:
var con:LocalConnection; con = new LocalConnection(); con.connect('conName); function methodName():void { //do something }
und
var con:LocalConnection; con = new LocalConnection(); con.send('conName','methodName');
funktionieren nicht wie im Referenzhandbuch beschrieben. Das Problem ist vielschichtig, die Fehlermeldung für die Katz.