パッケージ | flash.net |
クラス | public class NetGroup |
継承 | NetGroup EventDispatcher Object |
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 10.1, AIR 2 |
-
サービスの質(QoS)の監視。
info
プロパティには、NetGroupInfo オブジェクトが含まれており、このオブジェクトのプロパティによってこのグループの QoS 統計が提供されます。 -
ポスティング。
post()
を呼び出して、グループのすべてのメンバーに ActionScript メッセージをブロードキャストします。 -
転送。
sendToNearest()
、sendToNeighbor()
、およびsendToAllNeighbors()
を呼び出して、短いデータメッセージを、ピアツーピアグループの指定したメンバーに送信します。送信元と送信先には、直接の接続は必要ありません。 -
オブジェクトレプリケーション。
addHaveObjects()
、removeHaveObjects()
、addWantObjects()
、removeWantObjects()
、writeRequestedObject()
およびdenyRequestedObject()
を呼び出して、大きなデータを細かく分割し、ピアツーピアグループ のすべてのノードにレプリケートします。
クライアントサイドの NetGroup クラスでは、NetConnection によって次のイベントが送出されます。
- NetGroup.Connect.Success
- NetGroup.Connect.Failed
- NetGroup.Connect.Rejected
イベントオブジェクトの info.group
プロパティには、イベントソース(NetGroup)への参照が含まれます。NetGroup によって他のすべてのイベントが送出されます。サーバーサイドの NetGroup クラスでは、NetGroup によってすべてのイベントが送出されます。
ピアー対応ネットワークにおけるグループの使用について詳しくは、同じく Tom Krcha による Social Media Experiences with Flash Media and RTMFP を参照してください。
ピアー対応ネットワークの背景にある技術的な詳細については、Adobe コンピューターサイエンティストの Matthew Kaufman による P2P on the Flash Platform with RTMFP を参照してください。
関連する API エレメント
プロパティ | 定義元 | ||
---|---|---|---|
constructor : Object
指定されたオブジェクトインスタンスのクラスオブジェクトまたはコンストラクター関数への参照です。 | Object | ||
estimatedMemberCount : Number [読み取り専用]
ローカルネイバーフッドの密度に基づき、グループアドレスが均等に分配されることを前提にして、グループの推定メンバー数を指定します。 | NetGroup | ||
info : NetGroupInfo [読み取り専用]
NetGroupInfo オブジェクトを返します。このオブジェクトのプロパティに、NetGroup の RTMFP ピアーツーピアーデータ転送に関するサービスの質(QoS)の統計が示されます。 | NetGroup | ||
localCoverageFrom : String [読み取り専用]
このノードが「最も近く」にあって管理しているグループアドレスの範囲の始まりを指定します。 | NetGroup | ||
localCoverageTo : String [読み取り専用]
このノードが「最も近く」にあって管理しているグループアドレスの範囲の終わりを指定します。 | NetGroup | ||
neighborCount : Number [読み取り専用]
このノードが直接接続されているグループメンバーの数を指定します。 | NetGroup | ||
receiveMode : String
NetGroupReceiveMode enum クラスの値の 1 つとして、ノードの配信受信モードを指定します。 | NetGroup | ||
replicationStrategy : String
オブジェクトレプリケーションのフェッチ方法を指定します。 | NetGroup |
メソッド | 定義元 | ||
---|---|---|---|
指定された NetConnection オブジェクトに新しい NetGroup を構築し、それを groupspec で指定されたグループに結合します。 | NetGroup | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
イベントリスナーオブジェクトを EventDispatcher オブジェクトに登録し、リスナーがイベントの通知を受け取るようにします。 | EventDispatcher | ||
このノードがネイバーにアドバタイズするオブジェクト(要求を満たすオブジェクト)のセットに、startIndex から endIndex の範囲に含まれるオブジェクトを追加します。 | NetGroup | ||
その peerID がグループのメンバーであることを指定するレコードを手動で追加します。 | NetGroup | ||
既にグループに存在しているはずの指定された peerID へ直ちに直接接続することによって、手動でネイバーを追加します。 | NetGroup | ||
取得するオブジェクトのセットに、startIndex から endIndex の範囲にあるオブジェクトを追加します。 | NetGroup | ||
グループから切断し、この NetGroup を閉じます。 | NetGroup | ||
peerID を sendToNearest() メソッドで使用するために適切なグループアドレスに変換します。 | NetGroup | ||
以前に addHaveObjects() でアドバタイズされたオブジェクトの NetStatusEvent NetGroup.Replication.Request で受信した要求を拒否します。 | NetGroup | ||
イベントをイベントフローに送出します。 | EventDispatcher | ||
EventDispatcher オブジェクトに、特定のイベントタイプに対して登録されたリスナーがあるかどうかを確認します。 | EventDispatcher | ||
オブジェクトに指定されたプロパティが定義されているかどうかを示します。 | Object | ||
Object クラスのインスタンスが、パラメーターとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。 | Object | ||
グループ内のすべてのメンバーにメッセージを送信します。 | NetGroup | ||
指定されたプロパティが存在し、列挙できるかどうかを示します。 | Object | ||
EventDispatcher オブジェクトからリスナーを削除します。 | EventDispatcher | ||
このノードがネイバーにアドバタイズするオブジェクト(要求を満たすオブジェクト)のセットから、startIndex から endIndex の範囲に含まれるオブジェクトを削除します。 | NetGroup | ||
取得するオブジェクトのセットから、startIndex から endIndex の範囲に含まれるオブジェクトを削除します。 | NetGroup | ||
すべてのネイバーにメッセージを送信します。 | NetGroup | ||
指定されたグループアドレスに最も近いネイバー(ローカルノード)にメッセージを送信します。 | NetGroup | ||
sendMode パラメーターで指定されたネイバーにメッセージを送信します。 | NetGroup | ||
ループ処理に対するダイナミックプロパティの可用性を設定します。 | Object | ||
ロケール固有の規則に従って書式設定された、このオブジェクトのストリング表現を返します。 | Object | ||
指定されたオブジェクトのストリング表現を返します。 | Object | ||
指定されたオブジェクトのプリミティブな値を返します。 | Object | ||
指定されたイベントタイプについて、この EventDispatcher オブジェクトまたはその祖先にイベントリスナーが登録されているかどうかを確認します。 | EventDispatcher | ||
以前に addHaveObjects() メソッドで通知したオブジェクトの NetStatusEvent NetGroup.Replication.Request で受信した要求を満たします。 | NetGroup |
イベント | 概要 | 定義元 | ||
---|---|---|---|---|
[ブロードキャストイベント] Flash Player または AIR アプリケーションがオペレーティングシステムのフォーカスを取得して、アクティブになったときに送出されます。 | EventDispatcher | |||
[ブロードキャストイベント] Flash Player または AIR アプリケーションがオペレーティングシステムのフォーカスを失って、非アクティブになったときに送出されます。 | EventDispatcher | |||
NetGroup オブジェクトが、そのステータスまたはエラーの状況をレポートするときに送出されます。 | NetGroup |
estimatedMemberCount | プロパティ |
info | プロパティ |
info:NetGroupInfo
[読み取り専用] 言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 10.1, AIR 2 |
NetGroupInfo オブジェクトを返します。このオブジェクトのプロパティに、NetGroup の RTMFP ピアーツーピアーデータ転送に関するサービスの質(QoS)の統計が示されます。
実装
public function get info():NetGroupInfo
関連する API エレメント
localCoverageFrom | プロパティ |
localCoverageTo | プロパティ |
neighborCount | プロパティ |
receiveMode | プロパティ |
replicationStrategy | プロパティ |
NetGroup | () | コンストラクター |
public function NetGroup(connection:NetConnection, groupspec:String)
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 10.1, AIR 2 |
指定された NetConnection オブジェクトに新しい NetGroup を構築し、それを groupspec
で指定されたグループに結合します。
ほとんどの場合、groupspec
にはローカルシステムでネットワークアップリンクを使用する可能性があります。NetStream または NetGroup オブジェクトが groupspec を使用して構築されている場合、プライバシーダイアログが表示されます。このダイアログにより、この接続をユーザーのピアーとのデータ共有に使用できるかどうかが確認されます。ユーザーが「このドメインでの使用を許可する」をクリックすると、次回ユーザーがこのアプリケーションに接続するときにこのダイアログは表示されません。ピアー対応ネットワークを許可しなかった場合、グループ内のピアー機能(ポスティング、転送、オブジェクトレプリケーションおよびマルチキャスト)はすべて無効になります。許可された場合、info
オブジェクトの code
プロパティの NetGroup.Connect.Success
によって、NetStatusEvent が NetConnection のイベントリスナーに送信されます。拒否された場合、code
プロパティは NetGroup.Connect.Rejected
になります。NetGroup.Connect.Success
イベントが受信されるまで、NetGroup オブジェクトの任意のメソッドを呼び出そうとすると、例外が発生します。
注意:クライアントがネイティブ IP マルチキャストストリームにサブスクライブした場合、セキュリティダイアログは表示されません。
パラメーターconnection:NetConnection — NetConnection オブジェクトです。
| |
groupspec:String — 結合する RTMFP ピアーツーピアーグループを指定するストリング(このメンバーの名前、機能、制限、および権限を含む)。
new NetGroup(myConnection, myGroupSpecifier.groupspecWithAuthorizations()); |
例外
ArgumentError — NetConnection インスタンスは接続されていません。
| |
Error — groupspec は無効です。
|
関連する API エレメント
addHaveObjects | () | メソッド |
public function addHaveObjects(startIndex:Number, endIndex:Number):void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 10.1, AIR 2 |
このノードがネイバーにアドバタイズするオブジェクト(要求を満たすオブジェクト)のセットに、startIndex
から endIndex
の範囲に含まれるオブジェクトを追加します。デフォルトでは、Have セットは空です。インデックスは、0 ~ 9007199254740992 の整数である必要があります。
オブジェクトのレプリケーションについて詳しくは、『Flash Media Server Developer’s Guide』の「Replicate an object within a group」を参照してください。
このメソッドは NetStatusEvent を info
オブジェクトの code
プロパティの NetGroup.Replication.Request
で NetGroup のイベントリスナーに送信します。
注意:このメソッドを呼び出す前に、NetGroup.Neighbor.Connect
イベントをテストしてください。
パラメーター
startIndex:Number — Have セットに追加するオブジェクトインデックスの範囲の始まり。
| |
endIndex:Number — Have セットに追加するオブジェクトインデックスの範囲の終わり。
|
例外
RangeError — このメソッドに渡される数は 0 より小さいか、9007199254740992 より大きくなります。
|
関連する API エレメント
addMemberHint | () | メソッド |
addNeighbor | () | メソッド |
public function addNeighbor(peerID:String):Boolean
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 10.1, AIR 2 |
既にグループに存在しているはずの指定された peerID
へ直ちに直接接続することによって、ネイバーを手動で追加します。この直接接続は、トポロジーに必要ない場合、後で切断される場合があります。
パラメーター
peerID:String — すぐに接続する peerID。
|
Boolean — 成功の場合は TRUE、エラーの場合は FALSE。
|
関連する API エレメント
addWantObjects | () | メソッド |
public function addWantObjects(startIndex:Number, endIndex:Number):void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 10.1, AIR 2 |
取得するオブジェクトのセットに、startIndex
から endIndex
の範囲にあるオブジェクトを追加します。インデックスは、0 ~ 9007199254740992 の整数である必要があります。デフォルトでは、Want セットは空です。
オブジェクトのレプリケーションについて詳しくは、『Flash Media Server Developer’s Guide』の「Replicate an object within a group」を参照してください。
このメソッドは、info.code
プロパティでNetGroup.Replication.Fetch.SendNotify
が指定されている NetStatusEvent を、NetGroup のイベントリスナーに送信します。このイベントの後には、NetGroup.Replication.Fetch.Failed
または NetGroup.Replication.Fetch.Result
イベントが続きます。
注意:このメソッドを呼び出す前に、NetGroup.Neighbor.Connect
イベントをテストしてください。
パラメーター
startIndex:Number — Want セットに追加するオブジェクトインデックスの範囲の始まり。
| |
endIndex:Number — Want セットに追加するオブジェクトインデックスの範囲の終わり。
|
例外
RangeError — このメソッドに渡される数は 0 より小さいか、9007199254740992 より大きくなります。
|
関連する API エレメント
close | () | メソッド |
public function close():void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 10.1, AIR 2 |
グループから切断し、この NetGroup を閉じます。この NetGroup はこのメソッドを呼び出した後、使用できません。
convertPeerIDToGroupAddress | () | メソッド |
denyRequestedObject | () | メソッド |
public function denyRequestedObject(requestID:int):void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 10.1, AIR 2 |
以前に addHaveObjects()
でアドバタイズされたオブジェクトの NetStatusEvent NetGroup.Replication.Request
で受信した要求を拒否します。この要求が Have セットから取り下げられない限り、または取り下げられるまで、要求元によってこのオブジェクトが再び要求される可能性があります。
オブジェクトのレプリケーションについて詳しくは、『Flash Media Server Developer’s Guide』の「Replicate an object within a group」を参照してください。
注意:このメソッドを呼び出す前に、NetGroup.Neighbor.Connect
イベントをテストしてください。
パラメーター
requestID:int — NetGroup.Replication.Request イベントで提供される要求識別子。
|
関連する API エレメント
post | () | メソッド |
public function post(message:Object):String
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 10.1, AIR 2 |
グループ内のすべてのメンバーにメッセージを送信します。このメソッドを呼び出すには、NetGroup コンストラクターに渡される groupspec 内で、GroupSpecifier.postingEnabled
プロパティが true
に設定されている必要があります。詳細については、『Flash Media Server Developer’s Guide』の「Post messages to a group」を参照してください。
すべてのメッセージは一意である必要があり、以前にアップロードされたメッセージと同一のメッセージはアップロードされない場合があります。シーケンス番号を使用して、メッセージを一意にします。
メッセージの配信は順序付けられません。メッセージの配信は保証されません。
メッセージは AMF でシリアル化されます。メッセージの型は、Object、int、Number、String のいずれかです。メッセージは MovieClip にはできません。
このメソッドは NetStatusEvent を info.code
プロパティの NetGroup.Posting.Notify
で NetGroup のイベントリスナーに送信します。「NetGroup.Posting.Notify
」イベントは、クライアント上とサーバー上の両方の NetGroup に送信されます。
注意:このメソッドを呼び出す前に、NetGroup.Neighbor.Connect
イベントをテストしてください。
パラメーター
message:Object — グループ内の他のすべてのメンバーに送信するメッセージ。
|
String — アップロードされた場合のメッセージの messageID です。エラーの場合は null になります。messageID はメッセージを直列化した raw バイトの 16 進数の SHA256 です。
|
関連する API エレメント
例 ( この例の使用方法 )
アプリケーションの実行時に、テキスト入力フィールドに任意のグループ名を入力できます。GroupSpecifier クラスはこのグループ名(および設定済みの GroupSpecifier プロパティ)を使用して、グループの永続的な固有名となるストリングを作成します。他のクライアントをグループに接続するには、そのクライアントも同じグループ名を使用する必要があります。例えば、クライアント A が「firstmesh」というグループ名を使用する場合、クライアント A と通信したい他のクライアントも、グループ名「firstmesh」を使用する必要があります。クライアント B が「kite」というグループ名を使用している場合、接続は成功しますが、新しいグループが作成され、クライアント B はクライアント A および「firstmesh」グループに属する他のクライアントとは通信できません。
この例を実行するには、Button、Label、TextInput、TextArea の各コンポーネントを Flash Professional のライブラリに追加します。
package { import flash.display.Sprite; import flash.events.TextEvent; import flash.events.MouseEvent; import flash.events.NetStatusEvent; import fl.events.ComponentEvent; import fl.controls.Label; import fl.controls.Button; import fl.controls.TextInput; import fl.controls.TextArea; import flash.text.TextFieldAutoSize; import flash.net.*; public class NetGroupPostExample extends Sprite{ private var connectButton:Button; private var disconnectButton:Button; private var groupNameText:TextInput; private var userNameText:TextInput; private var chatText:TextInput; private var statusLog:TextArea; private var groupLabel:Label; private var userLabel:Label; private var netConnection:NetConnection = null; private var netGroup:NetGroup = null; private var sequenceNumber:uint = 0; private var connected:Boolean = false; private var joinedGroup:Boolean = false; private const SERVER:String = "rtmfp://fms.example.com/someapp"; public function NetGroupPostExample() { DoUI(); } // Writes messages to the TextArea. private function StatusMessage(msg:Object):void{ statusLog.text += msg; statusLog.verticalScrollPosition = statusLog.textHeight; statusLog.validateNow(); } // Handles all NetStatusEvents for the NetConnection and the NetGroup. // This code includes cases it doesn't handle so you can see the cases // and their info objects for learning purposes. private function NetStatusHandler(e:NetStatusEvent):void{ StatusMessage(e.info.code + "\n"); switch(e.info.code){ case "NetConnection.Connect.Success": connectButton.enabled = false; disconnectButton.enabled = true; OnConnect(); break; case "NetConnection.Connect.Closed": OnDisconnect(); break; case "NetGroup.Connect.Success": // e.info.group OnNetGroupConnect(); break; case "NetGroup.Connect.Rejected": // e.info.group case "NetGroup.Connect.Failed": // e.info.group break; case "NetGroup.Posting.Notify": // e.info.message, e.info.messageID OnPosting(e.info.message); break; case "NetStream.MulticastStream.Reset": case "NetStream.Buffer.Full": break; case "NetGroup.SendTo.Notify": // e.info.message, e.info.from, e.info.fromLocal case "NetGroup.LocalCoverage.Notify": // case "NetGroup.Neighbor.Connect": // e.info.neighbor case "NetGroup.Neighbor.Disconnect": // e.info.neighbor case "NetGroup.MulticastStream.PublishNotify": // e.info.name case "NetGroup.MulticastStream.UnpublishNotify": // e.info.name case "NetGroup.Replication.Fetch.SendNotify": // e.info.index case "NetGroup.Replication.Fetch.Failed": // e.info.index case "NetGroup.Replication.Fetch.Result": // e.info.index, e.info.object case "NetGroup.Replication.Request": // e.info.index, e.info.requestID default: break; } } // Creates a NetConnection to Flash Media Server if the app isn't already connected // and if there's a group name in the TextInput field. private function DoConnect(e:MouseEvent):void{ if(!connected && (groupNameText.length > 0)){ StatusMessage("Connecting to \"" + SERVER + "\" ...\n"); netConnection = new NetConnection(); netConnection.addEventListener(NetStatusEvent.NET_STATUS, NetStatusHandler); // To connect to Flash Media Server, pass the server name. netConnection.connect(SERVER); } else { StatusMessage("Enter a group name"); } } // Called in the "NetConnection.Connect.Success" case in the NetStatusEvent handler. private function OnConnect():void{ StatusMessage("Connected\n"); connected = true; // Create a GroupSpecifier object to pass to the NetGroup constructor. // The GroupSpecifier determines the properties of the group var groupSpecifier:GroupSpecifier; groupSpecifier = new GroupSpecifier("aslrexample/" + groupNameText.text); groupSpecifier.postingEnabled = true; groupSpecifier.serverChannelEnabled = true; netGroup = new NetGroup(netConnection, groupSpecifier.groupspecWithAuthorizations()); netGroup.addEventListener(NetStatusEvent.NET_STATUS, NetStatusHandler); StatusMessage("Join \"" + groupSpecifier.groupspecWithAuthorizations() + "\"\n"); } private function OnNetGroupConnect():void{ joinedGroup = true; } private function DoDisconnect(e:MouseEvent):void{ if(netConnection){ netConnection.close(); } } private function OnDisconnect():void{ StatusMessage("Disconnected\n"); netConnection = null; netGroup = null; connected = false; joinedGroup = false; connectButton.enabled = true; disconnectButton.enabled = false; } private function ClearChatText():void{ chatText.text = ""; } // Called when you the chatText field has focus and you press Enter. private function DoPost(e:ComponentEvent):void{ if(joinedGroup){ var message:Object = new Object; message.user = userNameText.text; message.text = chatText.text; message.sequence = sequenceNumber++; message.sender = netConnection.nearID; netGroup.post(message); StatusMessage("==> " + chatText.text + "\n"); } else { StatusMessage("Click Connect before sending a chat message"); } ClearChatText(); } private function OnPosting(message:Object):void{ StatusMessage("<" + message.user + "> " + message.text + "\n"); } private function DoUI():void { groupLabel = new Label(); groupLabel.move(20, 10); groupLabel.autoSize = TextFieldAutoSize.LEFT groupLabel.text = "Group name:" addChild(groupLabel); groupNameText = new TextInput(); groupNameText.move(90, 10); groupNameText.text = "channel" + (int(Math.random() * 899) + 101); addChild(groupNameText); connectButton = new Button(); connectButton.addEventListener(MouseEvent.CLICK, DoConnect); connectButton.move(205, 10); connectButton.label = "Connect"; addChild(connectButton); disconnectButton = new Button(); disconnectButton.addEventListener(MouseEvent.CLICK, DoDisconnect); disconnectButton.move(310, 10); disconnectButton.label = "Disconnect"; disconnectButton.enabled = false; addChild(disconnectButton); statusLog = new TextArea(); statusLog.move(30, 38); statusLog.width = 360; statusLog.height = 215; statusLog.editable = false; addChild(statusLog); userLabel = new Label(); userLabel.move(20, 270); userLabel.autoSize = TextFieldAutoSize.LEFT userLabel.text = "User name:" addChild(userLabel); userNameText = new TextInput(); userNameText.move(80, 270); userNameText.text = "user " + int(Math.random() * 65536); addChild(userNameText); chatText = new TextInput(); chatText.addEventListener(ComponentEvent.ENTER, DoPost); chatText.move(185, 270); chatText.maxChars = 255; chatText.width = 215; addChild(chatText); } public function onPlayStatus(info:Object):void {} public function onMetaData(info:Object):void {} public function onCuePoint(info:Object):void {} public function onTextData(info:Object):void {} } }
removeHaveObjects | () | メソッド |
public function removeHaveObjects(startIndex:Number, endIndex:Number):void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 10.1, AIR 2 |
このノードがネイバーにアドバタイズするオブジェクト(要求を満たすオブジェクト)のセットから、startIndex
から endIndex
の範囲に含まれるオブジェクトを削除します。インデックスは、0 ~ 9007199254740992 の整数である必要があります。
オブジェクトのレプリケーションについて詳しくは、『Flash Media Server Developer’s Guide』の「Replicate an object within a group」を参照してください。
注意:このメソッドを呼び出す前に、NetGroup.Neighbor.Connect
イベントをテストしてください。
パラメーター
startIndex:Number — Have セットから削除するオブジェクトインデックスの範囲の始まり。
| |
endIndex:Number — Have セットから削除するオブジェクトインデックスの範囲の終わり。
|
例外
RangeError — このメソッドに渡される数は 0 より小さいか、9007199254740992 より大きくなります。
|
関連する API エレメント
removeWantObjects | () | メソッド |
public function removeWantObjects(startIndex:Number, endIndex:Number):void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 10.1, AIR 2 |
取得するオブジェクトのセットから、startIndex
から endIndex
の範囲に含まれるオブジェクトを削除します。インデックスは、0 ~ 9007199254740992 の整数である必要があります。
オブジェクトのレプリケーションについて詳しくは、『Flash Media Server Developer’s Guide』の「Replicate an object within a group」を参照してください。
注意:このメソッドを呼び出す前に、NetGroup.Neighbor.Connect
イベントをテストしてください。
パラメーター
startIndex:Number — Want セットから削除するオブジェクトインデックスの範囲の始まり。
| |
endIndex:Number — Want セットから削除するオブジェクトインデックスの範囲の終わり。
|
例外
RangeError — このメソッドに渡される数は 0 より小さいか、9007199254740992 より大きくなります。
|
関連する API エレメント
sendToAllNeighbors | () | メソッド |
public function sendToAllNeighbors(message:Object):String
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 10.1, AIR 2 |
すべてのネイバーにメッセージを送信します。1 つ以上のネイバーが選択された場合、NetGroupSendResult.SENT
を返します。
メッセージのルーティングについて詳しくは、『Flash Media Server Developer’s Guide』の「Route messages directly to a peer」を参照してください。
ノードがメッセージを受信すると、NetStatusEvent が info
オブジェクトの code
プロパティの NetGroup.SendTo.Notify
オブジェクトで NetGroup のイベントリスナーに送信されます。
注意:このメソッドを呼び出す前に、NetGroup.Neighbor.Connect
イベントをテストしてください。
パラメーター
message:Object — 送信するメッセージです。
|
String — 送信の成功またはエラーを示す列挙クラス NetGroupSendResult のプロパティ。
|
関連する API エレメント
sendToNearest | () | メソッド |
public function sendToNearest(message:Object, groupAddress:String):String
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 10.1, AIR 2 |
指定されたグループアドレスに最も近いネイバー(ローカルノード)にメッセージを送信します。リング全体のネイバーを考慮します。メッセージが宛先に正しく送信された場合、NetGroupSendResult.SENT
を返します。
メッセージのルーティングについて詳しくは、『Flash Media Server Developer’s Guide』の「Route messages directly to a peer」を参照してください。
ノードがメッセージを受信すると、NetStatusEvent が info
オブジェクトの code
プロパティの NetGroup.SendTo.Notify
オブジェクトで NetGroup のイベントリスナーに送信されます。
注意:このメソッドを呼び出す前に、NetGroup.Neighbor.Connect
イベントをテストしてください。
パラメーター
message:Object — 送信するメッセージです。
| |
groupAddress:String — メッセージの配信先のグループアドレス。
|
String — 送信の成功またはエラーを示す列挙クラス NetGroupSendResult のプロパティ。
|
関連する API エレメント
sendToNeighbor | () | メソッド |
public function sendToNeighbor(message:Object, sendMode:String):String
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 10.1, AIR 2 |
sendMode
パラメーターで指定されたネイバーにメッセージを送信します。要求された宛先にメッセージが正しく送信された場合、NetGroupSendResult.SENT
を返します。
メッセージのルーティングについて詳しくは、『Flash Media Server Developer’s Guide』の「Route messages directly to a peer」を参照してください。
ノードがメッセージを受信すると、NetStatusEvent が info
オブジェクトの code
プロパティの NetGroup.SendTo.Notify
オブジェクトで NetGroup のイベントリスナーに送信されます。
注意:このメソッドを呼び出す前に、NetGroup.Neighbor.Connect
イベントをテストしてください。
パラメーター
message:Object — 送信するメッセージです。
| |
sendMode:String — メッセージの送信先のネイバーを指定する列挙クラス NetGroupSendMode のプロパティ。
|
String — 送信の成功またはエラーを示す列挙クラス NetGroupSendResult のプロパティ。
|
関連する API エレメント
writeRequestedObject | () | メソッド |
public function writeRequestedObject(requestID:int, object:Object):void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | Flash Player 10.1, AIR 2 |
以前に addHaveObjects()
メソッドで通知したオブジェクトの NetStatusEvent NetGroup.Replication.Request
で受信した要求を満たします。object
には、Object、int、Number、String のいずれかを使用できます。object
には MovieClip は指定できません。
オブジェクトのレプリケーションについて詳しくは、『Flash Media Server Developer’s Guide』の「Replicate an object within a group」を参照してください。
注意:このメソッドを呼び出す前に、NetGroup.Neighbor.Connect
イベントをテストしてください。
パラメーター
requestID:int — NetGroup.Replication.Request イベントで提供される要求識別子。
| |
object:Object — NetGroup.Replication.Request イベントで指定されたインデックスに対応するオブジェクト。
|
関連する API エレメント
netStatus | イベント |
flash.events.NetStatusEvent
プロパティ NetStatusEvent.type =
flash.events.NetStatusEvent.NET_STATUS
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 1.0, Flash Player 10.1 |
NetGroup オブジェクトが、そのステータスまたはエラーの状況をレポートするときに送出されます。netStatus
イベントには info
プロパティが含まれます。info
プロパティは、接続試行が成功したかどうかなど、イベントに関する情報を含むオブジェクトです。
type
プロパティ(netStatus
イベントオブジェクト)の値を定義します。
このイベントには、次のプロパティがあります。
プロパティ | 値 |
---|---|
bubbles | false |
cancelable | false は、キャンセルするデフォルトの動作がないことを示します。 |
currentTarget | イベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。 |
info | オブジェクトのステータスまたはエラー状態を記述するプロパティを持つオブジェクトです。 |
target | そのステータスを報告する NetConnection または NetStream オブジェクトです。 |
関連する API エレメント
アプリケーションの実行時に、テキスト入力フィールドに任意のグループ名を入力できます。GroupSpecifier クラスはこのグループ名(および設定済みの GroupSpecifier プロパティ)を使用して、グループの永続的な固有名となるストリングを作成します。他のクライアントをグループに接続するには、そのクライアントも同じグループ名を使用する必要があります。例えば、クライアント A が「firstmesh」というグループ名を使用する場合、クライアント A と通信したい他のクライアントも、グループ名「firstmesh」を使用する必要があります。クライアント B が「kite」というグループ名を使用している場合、接続は成功しますが、新しいグループが作成され、クライアント B はクライアント A および「firstmesh」グループに属する他のクライアントとは通信できません。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%" applicationComplete="OnApplicationComplete()"> <mx:Script> <![CDATA[ private var netConnection:NetConnection = null; private var netStream:NetStream = null; private var netGroup:NetGroup = null; private var video:Video = null; private var sequenceNumber:uint = 0; private var resizeTimer:Timer = null; private const SERVER:String = "rtmfp://fms.example.com/someapp"; [Bindable] private var connected:Boolean = false; [Bindable] private var joinedGroup:Boolean = false; private function OnApplicationComplete():void { userName.text = "user " + int(Math.random() * 65536); groupName.text = "channel" + (int(Math.random() * 899) + 101); resizeTimer = new Timer(2000.0); resizeTimer.addEventListener(TimerEvent.TIMER, DoResizeVideo); resizeTimer.start(); } private function StatusMessage(msg:Object):void { statusLog.text += msg; statusLog.verticalScrollPosition = statusLog.textHeight; statusLog.validateNow(); } private function NetStatusHandler(e:NetStatusEvent):void { StatusMessage(e.info.code); switch(e.info.code) { case "NetConnection.Connect.Success": OnConnect(); break; case "NetConnection.Connect.Closed": case "NetConnection.Connect.Failed": case "NetConnection.Connect.Rejected": case "NetConnection.Connect.AppShutdown": case "NetConnection.Connect.InvalidApp": OnDisconnect(); break; case "NetStream.Connect.Success": // e.info.stream OnNetStreamConnect(); break; case "NetStream.Connect.Rejected": // e.info.stream case "NetStream.Connect.Failed": // e.info.stream DoDisconnect(); break; case "NetGroup.Connect.Success": // e.info.group OnNetGroupConnect(); break; case "NetGroup.Connect.Rejected": // e.info.group case "NetGroup.Connect.Failed": // e.info.group DoDisconnect(); break; case "NetGroup.Posting.Notify": // e.info.message, e.info.messageID OnPosting(e.info.message); break; case "NetStream.MulticastStream.Reset": case "NetStream.Buffer.Full": DoResizeVideo(); break; case "NetGroup.SendTo.Notify": // e.info.message, e.info.from, e.info.fromLocal case "NetGroup.LocalCoverage.Notify": // case "NetGroup.Neighbor.Connect": // e.info.neighbor case "NetGroup.Neighbor.Disconnect": // e.info.neighbor case "NetGroup.MulticastStream.PublishNotify": // e.info.name case "NetGroup.MulticastStream.UnpublishNotify": // e.info.name case "NetGroup.Replication.Fetch.SendNotify": // e.info.index case "NetGroup.Replication.Fetch.Failed": // e.info.index case "NetGroup.Replication.Fetch.Result": // e.info.index, e.info.object case "NetGroup.Replication.Request": // e.info.index, e.info.requestID default: break; } } private function DoConnect():void { StatusMessage("Connecting to \"" + SERVER + "\" ...\n"); netConnection = new NetConnection(); netConnection.addEventListener(NetStatusEvent.NET_STATUS, NetStatusHandler); netConnection.connect(SERVER); } private function OnConnect():void { var groupSpecifier:GroupSpecifier; StatusMessage("Connected\n"); connected = true; groupSpecifier = new GroupSpecifier("max2009lab/" + groupName.text); groupSpecifier.multicastEnabled = true; groupSpecifier.postingEnabled = true; groupSpecifier.serverChannelEnabled = true; netStream = new NetStream(netConnection, groupSpecifier.groupspecWithAuthorizations()); netStream.addEventListener(NetStatusEvent.NET_STATUS, NetStatusHandler); netGroup = new NetGroup(netConnection, groupSpecifier.groupspecWithAuthorizations()); netGroup.addEventListener(NetStatusEvent.NET_STATUS, NetStatusHandler); StatusMessage("Join \"" + groupSpecifier.groupspecWithAuthorizations() + "\"\n"); } private function OnNetStreamConnect():void { netStream.client = this; var mic:Microphone = Microphone.getMicrophone(); if(mic) { mic.codec = SoundCodec.SPEEX; mic.setSilenceLevel(0); netStream.attachAudio(mic); StatusMessage("got microphone\n"); } var camera:Camera = Camera.getCamera(); if(camera) { camera.setMode(320, 240, 10); camera.setQuality(30000, 0); camera.setKeyFrameInterval(15); videoDisplay.attachCamera(camera); videoDisplay.maintainAspectRatio = true; netStream.attachCamera(camera); StatusMessage("got camera\n"); } netStream.publish("stream"); } private function OnNetGroupConnect():void { joinedGroup = true; } private function DoDisconnect():void { if(netConnection) netConnection.close(); videoDisplay.attachCamera(null); } private function OnDisconnect():void { StatusMessage("Disconnected\n"); netConnection = null; netStream = null; netGroup = null; connected = false; joinedGroup = false; } private function ClearChatText():void { chatText.text = ""; } private function DoPost():void { var message:Object = new Object; message.user = userName.text; message.text = chatText.text; message.sequence = sequenceNumber++; message.sender = netConnection.nearID; netGroup.post(message); StatusMessage("==> " + chatText.text + "\n"); chatText.callLater(ClearChatText); } private function OnPosting(message:Object):void { StatusMessage("<" + message.user + "> " + message.text + "\n"); } private function DoResizeVideo(ignored:* = null):void { if(video) { if( (0 == video.videoHeight) || (0 == video.videoWidth) ) { video.height = videoDisplay.height; video.width = videoDisplay.width; video.x = 0; video.y = 0; } else { var videoAspect:Number = Number(video.videoWidth) / Number(video.videoHeight); var displayAspect:Number = Number(videoDisplay.width) / Number(videoDisplay.height); var adjustFactor:Number; if(videoAspect >= displayAspect) // video is wider than display { adjustFactor = Number(video.videoWidth) / Number(videoDisplay.width); video.width = videoDisplay.width; video.height = int(Number(video.videoHeight) / adjustFactor); video.x = 0; video.y = int((videoDisplay.height - video.height) / 2); } else { adjustFactor = Number(video.videoHeight) / Number(videoDisplay.height); video.height = videoDisplay.height; video.width = int(Number(video.videoWidth) / adjustFactor); video.x = int((videoDisplay.width - video.width) / 2); video.y = 0; } } } } public function onPlayStatus(info:Object):void {} public function onMetaData(info:Object):void {} public function onCuePoint(info:Object):void {} public function onTextData(info:Object):void {} public function ValidateConnectAllowed(isConnected:Boolean, groupNameText:String):Boolean { return (!isConnected) && (groupNameText.length > 0); } ]]> </mx:Script> <mx:VBox top="10" right="10" left="10" bottom="10" verticalGap="6"> <mx:HBox width="100%"> <mx:Text text="Group:"/> <mx:TextInput id="groupName" width="100%" text="default" enabled="{!connected}"/> <mx:Button label="Connect" click="DoConnect()" enabled="{ValidateConnectAllowed(connected, groupName.text)}" /> <mx:Button label="Disconnect" click="DoDisconnect()" enabled="{connected}" /> </mx:HBox> <mx:VideoDisplay id="videoDisplay" width="320" height="240" resize="DoResizeVideo()"/> <mx:TextArea id="statusLog" width="100%" height="100%"/> <mx:HBox width="100%"> <mx:TextInput id="userName" width="160" /> <mx:TextInput id="chatText" width="100%" enabled="{joinedGroup}" enter="DoPost()"/> </mx:HBox> </mx:VBox> </mx:Application>
Tue Jun 12 2018, 10:34 AM Z