RTMFP でもストリームの受信ノードにデータを送ることができます。引き続き Flash Player 10 の機能の範囲です。
send() メソッド
RTMFP による P2P のストリーミングの場合でも、send() メソッドを使って受信側のメソッドを呼び出すことが可能です。その際、メソッドの引数としてデータを送信することができます。
send() メソッドは、ストリームを受信している全てのノードにデータ送信することができます。
下は send() メソッドの宣言です。
public function send(handlerName:String, ... arguments):void
1 つ目の引数が受信先で実行されるメソッドの名前です。2 つ目以降がそのメソッドに渡される引数になります。引数の数は任意です。
例えば、送信側では以下のようなコードを実行するとします。
_sendStream.send("sayHello", _netConnection.nearID);
この場合は、ストリームを受信している全てのノードに対し、sayHello() というメソッドを送信側のノード ID を引数として呼びだす、という指示になります。
受信ノードの設定
send() メソッドは、受信ノードの NetStream インスタンスの client 属性に設定されているオブジェクトのメソッドを実行します。onPeerConnect() メソッドの場合 (このときは送信側でしたが) と同じ構造です。
そのため、受信側ではオブジェクトに必要なメソッドを定義してから client 属性に設定しておきます。このオブジェクトに一致する名前のメソッドが定義されていないと何も起きません。
下のサンプルでは、sayHello() というメソッドを定義したオブジェクトを、NetStream オブジェクトの client 属性に設定しています。
// オブジェクトの生成 var customClient:Object = new Object(); // オブジェクトにメソッドを設定 customClient.sayHello = function(senderID:String):void { trace("送信者 ID: " + senderID); }; // 受信側 NetStream インスタンスの client 属性にオブジェクトを設定 _recvStream.client = customClient;
onPeerConnect() のときと同様に、予め必要なメソッドを持つカスタムクラスを定義し、それを使うという方法もあります。
peerStreams 属性
NetStream クラスには peerStreams という新しい属性が追加されています。これは NetStream オブジェクトの配列です。
ストリームの送信ノードと受信ノードが接続されると、新しく接続した受信ノードに対応する NetStream オブジェクトが、送信側ノードの peerStreams 属性に追加されます。
NetStream.peerStreams:Array [参照のみ] ストリーム受信中の NetStream の配列
ストリームの送信ノードは、この属性を使って、ストリームを受信しているノード 1 つ 1 つの NetStream オブジェクトにアクセスすることができます。そのため、特定の受信ノードに対して send() を呼び出すことも可能です。
下は使い方の 1 例です。
_sendStream.peerStreams[0].send("sayHello", _netConnection.nearID);
この例では、peerStreams 属性の配列内の最初の受信ストリームに対して、sayHello() を呼び出しています。
特定のパブリッシュ中の NetStream オブジェクトと関連付けられていない NetStream オブジェクトは NetConnection.unconnectedPeerStreams 属性に追加されます。
コメントする