Flash localConnection: Fehler #2000

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.