LocalConnectionの複数ウィンドウ対策

コードに説明を付けました。
ブクマとかスターが付いてから説明を書くことがよくあります。
説明が必要な場合は『解説キボンヌ』とコメントすると自動的に解説が付き ません。

ググルと何件か出てきますが、逆の方法としてこういうやり方もあります。
接続名を引数で渡したりしなくて良いし、送信側の数を制御できるのも面白く使えるんじゃないかなーと思います。


受信側

private var connection:LocalConnection = new LocalConnection();
private var realName:String = "_this_is_random_" + String(new Date().time); // ランダム名

// コンストラクタ
function LCReceiver() {
    // 最初から実際に使用するコネクションを張っておく
    this.connection.connect(realName);

    // なまはげ起動「つなぎたがってるコはいねがー!」
    var timer:Timer = new Timer(100);
    timer.addEventListener(TimerEvent.TIMER, this.acceptConnection);
    timer.start();
}

function acceptConnection(event:TimerEvent):void {
    try {
        // 送信側に本当のコネクションの名前(ランダム名)を渡す
        // _MyAppSetupConnectionNameはアプリケーション固有の固定名
        this.connection.send("_MyAppSetupConnectionName", "onConnectionName", realName);
        // 送信側の数をこの辺で制御できる(と思うんだけど試してない)
    } catch (e:Error) {
    }
}

送信側

private var setupConnection:LocalConnection = new LocalConnection();
public function onInit():void {
    // ホントの名前を待ち受ける
    this.setupConnection.client = this;
    this.setupConnection.connect("_MyAppSetupConnectionName");
}

public function onConnectionName(realName:String):void {
    // キタ━━(゚∀゚)━━ヨ
    this.setupConnection.close(); // 用済み

    var connection:LocalConnection = new LocalConnection();
    connection.send(realName, "foo");
}

まあこの例だと、100ms以内に送信側が複数発生するとonInitでconnectできないんですが、その辺はTimerとか使って適当に処理してくだしい。