LocalConnection クラスを使用すると、fscommand() メソッドや JavaScript を使用することなく他の SWF ファイルに命令を送信できる SWF ファイルを開発できます。LocalConnection オブジェクトでの通信相手は、同じクライアントコンピューター上で動作する SWF ファイルに限られますが、通信相手が同じアプリケーションで動作している必要はありません。例えば、ブラウザー上で動作している SWF ファイルとプロジェクターの SWF ファイルで情報を共有しつつ、プロジェクターがローカルの情報を管理し、ブラウザー上の SWF ファイルがリモート接続を実行するといった分担もできます。プロジェクターは、スタンドアローンアプリケーションとして実行可能な形式で保存される SWF ファイルです。つまり、実行可能ファイルの内部に埋め込まれているので、プロジェクトに Flash Player がインストールされている必要はありません。
LocalConnection オブジェクトは、異なるバージョンの ActionScript を使用した SWF 間の通信に使用できます。
-
ActionScript 1.0 または 2.0 の LocalConnection オブジェクトは、ActionScript 2.0 で作成された LocalConnection オブジェクトと通信できます。
-
ActionScript 1.0 または 2.0 の LocalConnection オブジェクトは、ActionScript 3.0 で作成された LocalConnection オブジェクトと通信できます。
Flash Player は、このバージョンが異なる LocalConnection オブジェクト間の通信を自動的に処理します。
LocalConnection オブジェクトの最も簡単な使用方法は、同じドメイン内または同じ AIR アプリケーション内の LocalConnection オブジェクト間の通信のみを許可することです。この場合、セキュリティに関する問題への対処は不要です。しかし、異なるドメイン間で通信を行う必要がある場合は、セキュリティ対策を実施する必要があります。いくつかの方法があります。詳しくは、
send()
メソッドの
connectionName
パラメーターおよび
LocalConnection
クラスの
allowDomain()
と
domain
のエントリに関する説明を参照してください。このクラスは、『
Adobe Flash Platform 用 ActionScript 3.0 リファレンスガイド
』のリストに含まれています。
LocalConnection オブジェクトを使用して 1 つの SWF ファイル内でデータを送受信することは可能ですが、お勧めしません。代わりに、共有オブジェクトを使用します。
LocalConnection オブジェクトにコールバックメソッドを追加するには、次の 3 つの方法があります。
-
LocalConnection クラスのサブクラスを作成してメソッドを追加する方法
-
LocalConnection.client
プロパティを、メソッドを実装したオブジェクトに設定する方法
-
LocalConnection を拡張した動的なクラスを作成し、動的にメソッドを追加する方法
第 1 の方法では、LocalConnection クラスを拡張することでコールバックメソッドを追加します。 LocalConnection インスタンスに動的にメソッドを追加するのではなく、カスタムクラス内にメソッドを定義します。 この方法を使用する例を次のコードに示します。
package
{
import flash.net.LocalConnection;
public class CustomLocalConnection extends LocalConnection
{
public function CustomLocalConnection(connectionName:String)
{
try
{
connect(connectionName);
}
catch (error:ArgumentError)
{
// server already created/connected
}
}
public function onMethod(timeString:String):void
{
trace("onMethod called at: " + timeString);
}
}
}
CustomLocalConnection クラスの新しいインスタンスを作成する場合、次のコードを使用できます。
var serverLC:CustomLocalConnection;
serverLC = new CustomLocalConnection("serverName");
コールバックメソッドを追加する 2 つ目の方法は、
LocalConnection.client
プロパティを使用する方法です。次のコードのように、カスタムクラスを作成し、そのクラスの新しいインスタンスを
client
プロパティに設定します。
var lc:LocalConnection = new LocalConnection();
lc.client = new CustomClient();
LocalConnection.client
プロパティは、呼び出されるオブジェクトのコールバックメソッドを指定します。このコードでは、
client
プロパティに CustomClient というカスタムクラスの新しいインスタンスを設定しています。
client
プロパティのデフォルト値は、現在の LocalConnection インスタンスです。例えば、あるウィンドウ内のボタンが別のウィンドウの表示を切り替えるアプリケーションのように、同じメソッドのセットが設定されていながら動作の異なる 2 つのデータハンドラーがある場合、
client
プロパティを使用できます。
CustomClient クラスを作成するには、次のようなコードを使用します。
package
{
public class CustomClient extends Object
{
public function onMethod(timeString:String):void
{
trace("onMethod called at: " + timeString);
}
}
}
コールバックメソッドを追加する 3 つ目の方法は、ダイナミッククラスを作成してメソッドを動的に関連付ける方法です。この方法は次のコードが示すように、ActionScript の以前のバージョンで LocalConnection クラスを使用する方法と非常によく似ています。
import flash.net.LocalConnection;
dynamic class DynamicLocalConnection extends LocalConnection {}
コールバックメソッドは、次のコードを使用して、このクラスに動的に追加できます。
var connection:DynamicLocalConnection = new DynamicLocalConnection();
connection.onMethod = this.onMethod;
// Add your code here.
public function onMethod(timeString:String):void
{
trace("onMethod called at: " + timeString);
}
以前のコールバックメソッドの追加方法はコードの移植があまり簡単ではないため、お勧めしません。 また、この方法でローカル接続を作成すると、ダイナミックプロパティへのアクセスは sealed プロパティにアクセスするより大幅に時間を要するため、パフォーマンスの問題が起きるおそれがあります。
isPerUser プロパティ
isPerUser
プロパティは、複数のユーザーが Mac コンピューターにログインしているときに発生する競合を解決するために、Flash Player (10.0.32)と AIR (1.5.2)に追加されました。他のオペレーティングシステムでは、ローカル接続は常に個別のユーザーが対象なので、このプロパティは無視されます。新規に作成するコードでは、
isPerUser
プロパティを
true
に設定することが必要です。ただし、後方互換性のために、デフォルト値は現在
false
です。このデフォルト値は、今後のバージョンのランタイムで変更される可能性があります。