パッケージ | flash.system |
クラス | public final class MessageChannel |
継承 | MessageChannel EventDispatcher Object |
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 11.4, AIR 3.4 |
各 MessageChannel オブジェクトは、送信ワーカーから受信ワーカーに送信されたメッセージオブジェクトのキューを含んでいます。send()
の各呼び出しは、オブジェクトをキューに追加します。receive()
の各呼び出しは、キューから最も古いメッセージオブジェクトを取得します。
MessageChannel()
コンストラクターを呼び出して MessageChannel インスタンスを直接作成しないでください。MessageChannel インスタンスを作成するには、受信する Worker オブジェクトを引数として渡す、チャンネルにメッセージを送信する Worker オブジェクトの createMessageChannel()
メソッドを呼び出します。
MessageChannel オブジェクトを使用してメッセージを送信する一般的なワークフローは、次のようになります。
-
送信ワーカーの
createMessageChannel()
メソッドを呼び出して、メッセージチャンネルを作成します。// In the sending worker swf var sendChannel:MessageChannel; sendChannel = Worker.current.createMessageChannel(receivingWorker);
-
Worker.setSharedProperty()
を呼び出すか、既存のメッセージチャンネルで送信することで、メッセージチャンネルを他のワーカーに渡します。receivingWorker.setSharedProperty("incomingChannel", sendChannel);
-
受信ワーカーのコードは、
channelMessage
イベントの MessageChannel オブジェクトにリスナーを登録します。// In the receiving worker swf var incomingChannel:MessageChannel; incomingChannel = Worker.current.getSharedProperty("incomingChannel"); incomingChannel.addEventListener(Event.CHANNEL_MESSAGE, handleIncomingMessage);
-
送信ワーカーのコードは、
send()
メソッドを呼び出すことで、メッセージを送信します。// In the sending worker swf sendChannel.send("This is a message");
-
ランタイムは、メッセージが送信されたことを示す、受信ワーカーのコード内のイベントハンドラーを呼び出します。
// In the receiving worker swf // This method is called when the message channel gets a message private function handleIncomingMessage(event:Event):void { // Do something with the message, as shown in the next code listing }
-
受信ワーカーのコードは、
receive()
メソッドを呼び出して、メッセージを取得します。receive()
メソッドによって返されたオブジェクトは、send()
メソッドに渡されたオブジェクトと同じデータ型を持ちます。var message:String = incomingChannel.receive() as String;
以上の非同期ワークフローに加えて、受信ワーカーのコードを一時停止し、メッセージが送信されるまで待つには、receive()
メソッドによる別のワークフローを使用できます。詳しくは、receive()
メソッドの説明を参照してください。
MessageChannel クラスは特別なオブジェクトタイプの 1 つで、ワーカー間でコピーされるのではなく、共有されます。Worker オブジェクトの setSharedProperty()
メソッドを呼び出すか、または MessageChannel オブジェクトを使用して、あるワーカーから別のワーカーにメッセージチャンネルを渡す場合、両方のワーカーは、ランタイムのメモリの同じ MessageChannel オブジェクトを参照します。
関連する API エレメント
プロパティ | 定義元 | ||
---|---|---|---|
constructor : Object
指定されたオブジェクトインスタンスのクラスオブジェクトまたはコンストラクター関数への参照です。 | Object | ||
messageAvailable : Boolean [読み取り専用]
MessageChannel が送信ワーカーからの 1 つ以上のメッセージを内部メッセージキューに持つかどうかを示します。 | MessageChannel | ||
state : String [読み取り専用]
MessageChannel オブジェクトの現在の状態を示します(open、closing、または closed)。 | MessageChannel |
メソッド | 定義元 | ||
---|---|---|---|
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void [オーバーライド]
イベントリスナーオブジェクトを EventDispatcher オブジェクトに登録し、リスナーがイベントの通知を受け取るようにします。 | MessageChannel | ||
すべてのメッセージが受信されたら、現在の MessageChannel を閉じるように指示します。 | MessageChannel | ||
イベントをイベントフローに送出します。 | EventDispatcher | ||
EventDispatcher オブジェクトに、特定のイベントタイプに対して登録されたリスナーがあるかどうかを確認します。 | EventDispatcher | ||
オブジェクトに指定されたプロパティが定義されているかどうかを示します。 | Object | ||
Object クラスのインスタンスが、パラメーターとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。 | Object | ||
指定されたプロパティが存在し、列挙できるかどうかを示します。 | Object | ||
このメッセージチャンネルで送信したメッセージのキューから単一のメッセージオブジェクトを取得します。 | MessageChannel | ||
[オーバーライド]
EventDispatcher オブジェクトからリスナーを削除します。 | MessageChannel | ||
送信ワーカーからオブジェクトを送信し、受信ワーカーのメッセージキューに追加します。 | MessageChannel | ||
ループ処理に対するダイナミックプロパティの可用性を設定します。 | Object | ||
ロケール固有の規則に従って書式設定された、このオブジェクトのストリング表現を返します。 | Object | ||
[オーバーライド]
指定されたオブジェクトのストリング表現を返します。 | MessageChannel | ||
指定されたオブジェクトのプリミティブな値を返します。 | Object | ||
指定されたイベントタイプについて、この EventDispatcher オブジェクトまたはその祖先にイベントリスナーが登録されているかどうかを確認します。 | EventDispatcher |
イベント | 概要 | 定義元 | ||
---|---|---|---|---|
[ブロードキャストイベント] Flash Player または AIR アプリケーションがオペレーティングシステムのフォーカスを取得して、アクティブになったときに送出されます。 | EventDispatcher | |||
送信ワーカーが、MessageChannel インスタンスのキューで新しいメッセージオブジェクトが使用できることを示す、この MessageChannel オブジェクトの send() メソッドを呼び出すたびに送出されます。 | MessageChannel | |||
メッセージチャンネルの state プロパティの値が変更されたときに送出されます。 | MessageChannel | |||
[ブロードキャストイベント] Flash Player または AIR アプリケーションがオペレーティングシステムのフォーカスを失って、非アクティブになったときに送出されます。 | EventDispatcher |
messageAvailable | プロパティ |
state | プロパティ |
addEventListener | () | メソッド |
override public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 11.4, AIR 3.4 |
イベントリスナーオブジェクトを EventDispatcher オブジェクトに登録し、リスナーがイベントの通知を受け取るようにします。イベントリスナーは、特定のタイプのイベント、段階、および優先度に関する表示リスト内のすべてのノードに登録できます。
イベントリスナーが正常に登録された後に、addEventListener()
をさらに呼び出して優先度を変更することはできません。リスナーの優先度を変更するには、最初に removeListener()
を呼び出す必要があります。その後、同じリスナーを新しい優先度レベルで再度登録できます。
リスナーが登録された後に、addEventListener()
(type
または useCapture
に別の値を設定)を再度呼び出すと、別のリスナー登録が作成されることに注意してください。例えば、最初にリスナーを登録するときに useCapture
を true
に設定すると、そのリスナーはキャプチャ段階のみでリスニングします。同じリスナーオブジェクトを使用して再度 addEventListener()
を呼び出すと(このとき、useCapture
に false
を設定)、異なる 2 つのリスナーが登録されます。1 つはキャプチャ段階でリスニングするリスナーで、もう 1 つはターゲット段階とバブリング段階でリスニングするリスナーです。
ターゲット段階またはバブリング段階のみを対象とするイベントリスナーを登録することはできません。登録時にこれらの段階が組み合わされるのは、バブリングはターゲットノードの祖先にしか適用されないためです。
イベントリスナーが不要になった場合は、removeEventListener()
を呼び出して、イベントリスナーを削除します。削除しない場合、メモリの問題が発生する可能性があります。ガベージコレクションでは、オブジェクトの送出が行われている限り、リスナーを削除しないので、イベントリスナーは自動的には削除されません(useWeakReference
パラメーターが true
に設定されていない場合)。
EventDispatcher インスタンスをコピーしても、それに関連付けられているイベントリスナーはコピーされません。新しく作成したノードにイベントリスナーが必要な場合は、ノードを作成した後に、リスナーを関連付ける必要があります。ただし、EventDispatcher インスタンスを移動した場合は、関連付けられているイベントリスナーも一緒に移動されます。
イベントがノードで処理されるときに、イベントリスナーがそのノードに登録中であれば、イベントリスナーは現在の段階ではトリガーされません。ただし、バブリング段階など、イベントフローの後の段階でトリガーすることができます。
イベントがノードで処理されているときにイベントリスナーがノードから削除された場合でも、イベントは現在のアクションによってトリガーされます。削除された後は、その後の処理で再び登録されない限り、イベントリスナーは二度と呼び出されません。
パラメーター
type:String — イベントのタイプです。
| |
listener:Function — イベントを処理するリスナー関数です。この関数は、次の例のように、Event オブジェクトを唯一のパラメーターとして受け取り、何も返さないものである必要があります。
function(evt:Event):void 関数の名前は任意に付けられます。 | |
useCapture:Boolean (default = false ) —
リスナーが、キャプチャ段階、またはターゲットおよびバブリング段階で動作するかどうかを判断します。useCapture を true に設定すると、リスナーはキャプチャ段階のみでイベントを処理し、ターゲット段階またはバブリング段階では処理しません。useCapture を false に設定すると、リスナーはターゲット段階またはバブリング段階のみでイベントを処理します。3 つの段階すべてでイベントを受け取るには、addEventListener を 2 回呼び出します。useCapture を true に設定して呼び出し、useCapture を false に設定してもう一度呼び出します。
| |
priority:int (default = 0 ) — イベントリスナーの優先度レベルです。優先度は、符号付き 32 bit 整数で指定します。数値が大きくなるほど優先度が高くなります。優先度が n のすべてのリスナーは、優先度が n-1 のリスナーよりも前に処理されます。複数のリスナーに対して同じ優先度が設定されている場合、それらは追加された順番に処理されます。デフォルトの優先度は 0 です。
| |
useWeakReference:Boolean (default = false ) — リスナーへの参照が強参照と弱参照のいずれであるかを判断します。デフォルトである強参照の場合は、リスナーのガベージコレクションが回避されます。弱参照では回避されません。 クラスレベルメンバー関数はガベージコレクションの対象外であるため、クラスレベルメンバー関数の |
close | () | メソッド |
public function close():void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 11.4, AIR 3.4 |
すべてのメッセージが受信されたら、現在の MessageChannel を閉じるように指示します。
このメソッドを呼び出すと、メッセージをキューに追加するための send()
メソッドを呼び出せなくなります。send()
呼び出しは失敗し、false
が返されます。
また、既にキューで待機しているメッセージを受信するための receive()
メソッドのみを呼び出すことができます。キューが空の場合、receive()
呼び出しは null
を返します。
イベント
channelState: — (state プロパティを MessageChannelState.CLOSING に設定する)close() メソッドが呼び出されたときに送出されます。すべてのメッセージが受信され、state プロパティが MessageChannelState.CLOSED に設定されたときにもう一度送出されます。
|
receive | () | メソッド |
public function receive(blockUntilReceived:Boolean = false):*
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 11.4, AIR 3.4 |
このメッセージチャンネルで送信したメッセージのキューから単一のメッセージオブジェクトを取得します。
送信ワーカーのコードが MessageChannel オブジェクトの send()
メソッドを呼び出すたびに、1 つのオブジェクトがメッセージチャンネルの内部メッセージキューに追加されます。これらのオブジェクトは、receive()
メソッドを呼び出す受信ワーカーによって 1 つずつ削除されるまでキューに積み上げられます。メッセージオブジェクトは、送信された順番に受信されます。
受信するメッセージオブジェクトがキューに含まれているかどうかを確認するには、messageAvailable
プロパティを使用します。
通常、send()
に渡されたオブジェクトは、AMF3 フォーマットで直列化されます。receive()
呼び出しによってオブジェクトがキューから削除されると、受信ワーカーの ActionScript オブジェクト(元のオブジェクトのコピー)に直列化解除され、ワーカーはそのコピーへの参照を受け取ります。オブジェクトのタイプによっては、コピーでなくワーカー間で共有されます。その場合、受信ワーカーが取得したオブジェクトは、オブジェクトの新しいコピーではなく、共有オブジェクト自体への参照です。この場合について詳しくは、send()
メソッドの説明を参照してください。
メッセージキューが空で blockUntilReceived
パラメーターに true
を渡すと、メソッドの動作が変わります。その場合、ワーカーは receive()
呼び出しで実行スレッドを一時停止し、その他のコードを実行しません。送信ワーカーが send()
を呼び出すと、メッセージを受信して receive()
呼び出しが完了します。次に、ワーカーは、receive 呼び出しに続くコードの次の行からコードの実行を再開します。
パラメーター
blockUntilReceived:Boolean (default = false ) — ワーカーの実行スレッドがメッセージオブジェクトを受信して実行を継続するか(false )、または receive() 呼び出しでワーカーの実行スレッドが一時停止した場合に、キューが空の場合でもメッセージが送信されるのを待つか(true )を示します。
|
* — 送信ワーカーによって send() メソッドに渡されたオブジェクトのコピーです。オブジェクトがワーカー間で共有される特別なタイプの 1 つの場合、戻り値は、コピーではなく共有オブジェクトへの参照です。使用できるメッセージがキューにない場合は、null を返します。
|
例外
IOError — メソッドが呼び出されたときにチャンネルが閉じられるか、blockUntilReceived 引数によって実行が一時停止され、チャンネルが他のワーカーによって閉じられた場合。
| |
ArgumentError — コードの呼び出しが受信ワーカー内でない場合
| |
ScriptTimeoutError — Flash Player で基本ワーカーのコードからメソッドが呼び出される場合、および blockUntilReceived 引数によってワーカーがスクリプトのタイムアウト制限(デフォルトでは 15 秒)を超えて一時停止する場合
|
関連する API エレメント
removeEventListener | () | メソッド |
override public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 11.4, AIR 3.4 |
EventDispatcher オブジェクトからリスナーを削除します。対応するリスナーが EventDispatcher オブジェクトに登録されていない場合は、このメソッドを呼び出しても効果はありません。
パラメーター
type:String — イベントのタイプです。
| |
listener:Function — 削除するリスナーオブジェクトです。
| |
useCapture:Boolean (default = false ) —
リスナーが、キャプチャ段階、またはターゲットおよびバブリング段階に対して登録されたかどうかを示します。リスナーがキャプチャ段階だけでなくターゲット段階とバブリング段階にも登録されている場合は、removeEventListener() を 2 回呼び出して両方のリスナーを削除する必要があります。1 回は useCapture() を true に設定し、もう 1 回は useCapture() を false に設定する必要があります。
|
send | () | メソッド |
public function send(arg:*, queueLimit:int = -1):void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 11.4, AIR 3.4 |
送信ワーカーからオブジェクトを送信し、受信ワーカーのメッセージキューに追加します。
arg
パラメーターには、ほとんどすべてのオブジェクトを渡すことができます。後述の例外を除いて、arg
パラメーターに渡されるすべてのオブジェクトは、参照からは渡されません。send()
が呼び出されてからあるワーカーのオブジェクトに対して行われた変更は、別のワーカーには引き継がれません。オブジェクトを AMF3 フォーマットに直列化し、receive()
が呼び出されて受信ワーカーの新しいオブジェクトに直列化解除されることで、オブジェクトがコピーされます。そのため、表示オブジェクトを含む、AMF3 フォーマットに直列化できないすべてのオブジェクトは、arg
パラメーターに渡せません。カスタムクラスが適切に渡されるようにするために、クラス定義は、flash.net.registerClassAlias()
関数または [RemoteClass]
メタデータを使用して登録する必要があります。どちらの方法でも、両方のワーカーのクラスのバージョンに同じエイリアスを使用する必要があります。
オブジェクトはワーカー間で共有されないという規則の例外として、5 つのタイプのオブジェクトがあります。
- Worker
- MessageChannel
- 共有可能 ByteArray(
shareable
プロパティをtrue
に設定した ByteArray オブジェクト) - Mutex
- Condition
これらのオブジェクトのインスタンスを arg
パラメーターに渡すと、各ワーカーは、同じ基になるオブジェクトへの参照を持ちます。あるワーカーのインスタンスに対して行われた変更は、別のワーカーで即座に利用できます。また、send()
を使用して 2 回以上それらのオブジェクトの同じインスタンスを渡すと、ランタイムは受信ワーカーにオブジェクトの新しいコピーを作成しません。代わりに、同じ参照が再利用され、システムメモリの使用を減らします。
デフォルトでは、このメソッドはオブジェクトをキューに追加して直ちに戻り、コードの次の行の実行を続行します。キューがあるサイズを超えないようにする場合は、queueLimit
パラメーターを使用して、キューで許可するアイテムの最大数を指定します。send()
を呼び出したときにキューのアイテム数が指定した制限を超える場合、ワーカーは send()
呼び出しで実行スレッドを一時停止します。キューサイズが指定したキュー制限を下回るのに十分な回数だけ受信ワーカーが receive()
を呼び出すと、send() 呼び出しが完了します。次に、ワーカーはコードの次の行から実行を続行します。
パラメーター
arg:* — メッセージキューに追加するオブジェクト
| |
queueLimit:int (default = -1 ) — メッセージキューが格納できるメッセージオブジェクトの最大数。キューが制限を超えてオブジェクトを格納すると、送信ワーカーは、メッセージが受信されてキューサイズが制限内に小さくなるまで、実行を一時停止します。
|
イベント
channelMessage: — キューでメッセージオブジェクトを利用できる受信ワーカーを知らせるために送出されます。
|
例外
IOError — メソッドが呼び出されたときにチャンネルが閉じられるか、queueLimit 引数によって実行が一時停止され、チャンネルが他のワーカーによって閉じられた場合。
| |
ArgumentError — コードの呼び出しが送信ワーカー内でない場合
| |
ScriptTimeoutError — Flash Player で基本ワーカーのコードからメソッドが呼び出される場合、および queueLimit 引数によってワーカーがスクリプトのタイムアウト制限(デフォルトでは 15 秒)を超えて一時停止する場合
|
関連する API エレメント
toString | () | メソッド |
override public function toString():String
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 11.4, AIR 3.4 |
指定されたオブジェクトのストリング表現を返します。
注意:Object クラスのメソッドは、Object のプロトタイプに動的に作成されます。Object のサブクラスでこのメソッドを再定義する場合は、override
キーワードを使用しないでください。例えば、Object のサブクラスでは、基本クラスのオーバーライドを使用する代わりに function toString():String
が実装されます。
String — オブジェクトのストリング表現です。
|
channelMessage | イベント |
flash.events.Event
プロパティ Event.type =
flash.events.Event.CHANNEL_MESSAGE
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 11.4, AIR 3.4 |
送信ワーカーが、MessageChannel インスタンスのキューで新しいメッセージオブジェクトが使用できることを示す、この MessageChannel オブジェクトの send()
メソッドを呼び出すたびに送出されます。
Event.CHANNEL_MESSAGE
定数は、channelMessage
イベントオブジェクトの type
プロパティの値を定義します。
このイベントには、次のプロパティがあります。
プロパティ | 値 |
---|---|
bubbles | false |
cancelable | false は、キャンセルするデフォルトの動作がないことを示します。 |
currentTarget | イベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。 |
target | このイベントを送出したオブジェクトです。 |
channelState | イベント |
flash.events.Event
プロパティ Event.type =
flash.events.Event.CHANNEL_STATE
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 11.4, AIR 3.4 |
メッセージチャンネルの state
プロパティの値が変更されたときに送出されます。
Event.CHANNEL_STATE
定数は、channelState
イベントオブジェクトの type
プロパティの値を定義します。
このイベントには、次のプロパティがあります。
プロパティ | 値 |
---|---|
bubbles | false |
cancelable | false は、キャンセルするデフォルトの動作がないことを示します。 |
currentTarget | イベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。 |
target | このイベントを送出したオブジェクトです。 |
Tue Jun 12 2018, 10:34 AM Z