LocalConnectionを使って同じクライアントコンピュータ上にある異なるSWF同士の通信を試してみるテスト
通信する方法は呼び出すswfと呼び出されるswfのドメインによって少し変わってきます
両方が同じドメインの場合
LocalConnection オブジェクトの最も簡単な使用方法は、 同じドメイン内の LocalConnection オブジェクト間だけで通信を許可することです。 これは、Flash Player ではデフォルトで同一ドメイン通信が許可されているためです。 同じドメインにある 2 つの SWF ファイル間で通信を行う場合は、 特別なセキュリティ対策を実装する必要はありません。 connectionName パラメータの値をそのまま connect() メソッドと send() メソッドに渡すだけです。
予測可能なドメイン名を持つ異なるドメインの場合
異なるドメインに存在する 2 つの SWF ファイル間で通信を行う場合は、 allowDomain() メソッドを呼び出して、2 つのドメイン間の通信を許可する必要があります。 また、send() メソッドでの接続名を、受信側 LocalConnection オブジェクトのドメイン名で 修飾する必要があります。
予測不可能なドメイン名を持つ異なるドメインの場合
受信側の LocalConnection オブジェクトを持つ SWF ファイルの移植性をドメイン間で高める場合もあります。 send() メソッドでドメイン名を指定せずに受信側と送信側の LocalConnection オブジェクトが 同じドメインにないことを Flash Player に認識させるには、connect() 呼び出しと send() 呼び出しの両方で、 接続名の前にアンダースコア (_) を付けます。2 つのドメイン間の通信を許可するには、 allowDomain() メソッドを呼び出して、LocalConnection の呼び出しを許可するドメインを渡します。 または、ワイルドカード (すべてのドメインからの呼び出しを許可する引数) を渡します。
とりあえず今回は一番簡単な同一ドメイン同士の通信を試して見ます
サンプルは送信側のswfをクリックすると受信側のswfに円が現れるという超簡単なものです
送信側 画面内をクリックしてみてください
Flash Player 10 にしてください
受信側 多分円が現れる はず・・・w
Flash Player 10 にしてください
ソースはこちら
LocalConnectionSender.as
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.net.LocalConnection;
[SWF(width=300, height=300)]
public class LocalConnetionSender extends Sprite
{
private var connect:LocalConnection;
public function LocalConnetionSender()
{
connect = new LocalConnection();
stage.addEventListener(MouseEvent.CLICK, onClick);
}
private function onClick(event:MouseEvent):void{
connect.send("myConnect", "makeCircle", stage.mouseX, stage.mouseY);
}
}
}
LocalReceiver.as
package {
import flash.display.Sprite;
import flash.net.LocalConnection;
[SWF(width=300, height=300)]
public class LocalConnectionReceiver extends Sprite
{
private var connect:LocalConnection;
private var mc:Sprite;
public function LocalConnectionReceiver()
{
mc = new Sprite();
this.addChild(mc);
connect = new LocalConnection();
connect.client = this;
connect.connect("myConnect");
}
public function makeCircle(mouseX:Number, mouseY:Number):void{
mc.graphics.lineStyle(Math.random()*10, Math.random()*0xffffff);
mc.graphics.drawCircle(mouseX,mouseY, Math.random()*50);
}
}
}

