Preview only show first 10 pages with watermark. For full document please download

Adobe Flash Media Interactive

   EMBED


Share

Transcript

ADOBE FLASH MEDIA INTERACTIVE SERVER 3.5 用のサーバー側スクリプト リファレンスガイド ® ® © 2009 Adobe Systems Incorporated. All rights reserved. Adobe® Flash® Media Interactive Server 3.5 サーバーサイド ActionScript® リファレンスガイド 本マニュアルがエンドユーザー使用許諾契約を含むソフトウェアと共に提供される場合、本マニュアルおよびその中に記載されているソフトウェアは、エンドユーザー使 用許諾契約にもとづいて提供されるものであり、当該エンドユーザー使用許諾契約の契約条件に従ってのみ使用または複製することが可能となるものです。当該エンド ユーザー使用許諾契約により許可されている場合を除き、本マニュアルのいかなる部分といえども、Adobe Systems Incorporated(アドビ システムズ社)の書面による 事前の許可なしに、電子的、機械的、録音、その他いかなる形式・手段であれ、複製、検索システムへの保存、または伝送を行うことはできません。本マニュアルの内容 は、エンドユーザー使用許諾契約を含むソフトウェアと共に提供されていない場合であっても、著作権法により保護されていることにご留意ください。 本マニュアルに記載される内容は、あくまでも参照用としてのみ使用されること、また、なんら予告なしに変更されることを条件として、提供されるものであり、従って、 当該情報が、アドビ システムズ社による確約として解釈されてはなりません。アドビ システムズ社は、本マニュアルにおけるいかなる誤りまたは不正確な記述に対して も、いかなる義務や責任を負うものではありません。 新しいアートワークを創作するためにテンプレートとして取り込もうとする既存のアートワークまたは画像は、著作権法により保護されている可能性のあるものであるこ とをご留意ください。保護されているアートワークまたは画像を新しいアートワークに許可なく取り込んだ場合、著作権者の権利を侵害することがあります。従って、著 作権者から必要なすべての許可を必ず取得してください。 例として使用されている会社名は、実在の組織を示すものではありません。 Adobe, the Adobe logo, ActionScript, ColdFusion, and Flash are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States and/or other countries. Java is a trademark or registered trademark of Sun Microsystems, Inc. in the United States and other countries. All other trademarks are the property of their respective owners. This work is licensed under the Creative Commons Attribution Non-Commercial 3.0 License.To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/3.0/us/ Portions include software under the following terms: Sorenson Spark™ video compression and decompression technology licensed from Sorenson Media, Inc. Speech compression and decompression technology licensed from Nellymoser, Inc. (www.nellymoser.com). Adobe Systems Incorporated, 345 Park Avenue, San Jose, California 95110, USA. Notice to U.S. Government End Users. The Software and Documentation are “Commercial Items,” as that term is defined at 48 C.F.R. §2.101, consisting of “Commercial Computer Software” and “Commercial Computer Software Documentation,” as such terms are used in 48 C.F.R. §12.212 or 48 C.F.R. §227.7202, as applicable. Consistent with 48 C.F.R. §12.212 or 48 C.F.R. §§227.7202-1 through 227.7202-4, as applicable, the Commercial Computer Software and Commercial Computer Software Documentation are being licensed to U.S. Government end users (a) only as Commercial Items and (b) with only those rights as are granted to all other end users pursuant to the terms and conditions herein. Unpublished-rights reserved under the copyright laws of the United States. Adobe Systems Incorporated, 345 Park Avenue, San Jose, CA 95110-2704, USA. For U.S. Government End Users, Adobe agrees to comply with all applicable equal opportunity laws including, if appropriate, the provisions of Executive Order 11246, as amended, Section 402 of the Vietnam Era Veterans Readjustment Assistance Act of 1974 (38 USC 4212), and Section 503 of the Rehabilitation Act of 1973, as amended, and the regulations at 41 CFR Parts 60-1 through 60-60, 60-250, and 60-741. The affirmative action clause and regulations contained in the preceding sentence shall be incorporated by reference. iii 目次 サーバーサイド ActionScript リファレンスガイド Flash Media Server のサーバーサイド API グローバル関数 .................................................................................. 1 ........................................................................................................... 1 Application クラス ...................................................................................................... 6 Client クラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 File クラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 LoadVars クラス Log クラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 NetConnection クラス NetStream クラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 ProxyStream クラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 SharedObject クラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 SOAPCall クラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 SOAPFault クラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Stream クラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 WebService クラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 XML クラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 XMLSocket クラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 XMLStreams クラス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 1 サーバーサイド ActionScript リファレンスガイ ド Adobe® Flash® Media Interactive Server アプリケーションのサーバーサイドコードを記述するには、サーバーサイド ActionScript™· を使用します。サーバーサイド ActionScript を使用すると、ログイン手順の制御、イベントの制御、他の サーバーとの通信、さまざまなサーバーサイドアプリケーションのリソースに対するユーザーアクセスの許可と禁止の切り 替え、ユーザーによる情報の更新や共有の許可などを行うことができます。 Flash Media Server のサーバーサイド API サーバーサイド ActionScript は、JavaScript 1.5 のアドビ システムズ社での名前です。Flash Media Interactive Server に は、サーバーサイドスクリプトをコンパイルして実行する Java-Script エンジンが埋め込まれています。この『サーバーサイ ド ActionScript リファレンスガイド』では、Flash Media Interactive Server ホスト環境のクラスと関数について説明して います。コア Java-Script クラス、関数、ステートメントおよび演算子を使用することもできます。詳細については、 http://developer.mozilla.org/ja の Core JavaScript 1.5 リファレンスを参照してください。JavaScript の詳細については、 http://developer.mozilla.org/ja の「JavaScript」を参照してください。 サーバーサイド ActionScript は、ActionScript 1.0 に似ていますが、同じものではありません。どちらの言語も ECMAScript(ECMA-262)Language Specification Edition 3 に基づいています。サーバーサイド ActionScript は、 Flash Media Interactive Server に埋め込まれている Mozilla SpiderMonkey エンジンで実行されます。ActionScript 1.0 は、Adobe® Flash® Player の AVM1(ActionScript Virtual Machine 1)で実行されます。ECMAScript 仕様は SpiderMonkey には正確に実装されていますが、Flash Player AVM1 には実装されていません。サーバーサイド ActionScript と ActionScript 1.0 の最も大きな違いは、サーバーサイド ActionScript では大文字と小文字が区別されるこ とです。 グローバル関数 サーバーサイドスクリプトでは次の関数を使用できます。 署名 説明 clearInterval() setInterval() メソッドの呼び出しを停止します。 getGlobal() secure.asc ファイルのロード中にグローバルオブジェクトに対するアクセスを提供します。 load() main.asc ファイルに Server-Side ActionScript ファイル(ASC)または JavaScript ファイル(JS)をロードします。 protectObject() オブジェクトのメソッドをアプリケーションコードから保護します。 setAttributes() 特定のメソッドとプロパティが列挙、書き込み、削除されるのを防ぎます。 setInterval() clearInterval() メソッドが呼び出されるまで、指定した時間間隔で関数またはメソッドを呼び出します。 trace() 式を評価し、値を出力します。 clearInterval() clearInterval(intervalID) FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 2 サーバーサイド ActionScript リファレンスガイド setInterval() メソッドの呼び出しを停止します。 使用できるバージョン Flash Communication Server 1 パラメータ intervalID setInterval() メソッドに対する以前の呼び出しで返された値を含む識別子。 例 次の例では、callback() という名前の関数を作成し、setInterval() メソッドに渡します。この関数は 1,000 ミリ秒ごとに呼び 出され、 「interval called.」というメッセージを出力します。setInterval() メソッドは、intervalID 変数に割り当てられている数値を 返します。この識別子によって、特定の setInterval() 呼び出しをキャンセルすることができます。コードの最終行で、 intervalID 変数が clearInterval() メソッドに渡され、setInterval() 呼び出しがキャンセルされます。 function callback(){trace("interval called");} var intervalID; intervalID = setInterval(callback, 1000); // sometime later clearInterval(intervalID); getGlobal() getGlobal() secure.asc ファイルのロード中にグローバルオブジェクトに対するアクセスを提供します。保護されているシステムコール を作成するには、getGlobal() 関数を使用します。 使用できるバージョン Flash Media Server 2 詳細 Flash Media Interactive Server には、セキュアモードと通常モードの 2 つのスクリプト実行モードがあります。セキュア モードでは、secure.asc ファイル(存在する場合)のみがロードされ、評価されます。その他のアプリケーションスクリプ トはロードされません。getGlobal() および protectObject() 関数は、セキュアモードでのみ使用可能です。これらは非常に効 力のある関数です。これらの関数によって、スクリプト実行環境への全面的なアクセスが提供され、システムオブジェクト の作成が可能となります。secure.asc ファイルがロードされると、サーバーは、通常のスクリプト実行モードに切り替えま す。通常モードは、そのアプリケーションがアンロードされるまで継続されます。 グローバルオブジェクトへの不注意なアクセスを防ぐため、常に(var で宣言された)一時変数にグローバルオブジェクト の参照を格納します。メンバー変数やグローバル変数には格納しないでください。 例 次のコードは、グローバルオブジェクトへの参照を取得します。 var global = getGlobal(); load() load(filename) FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 3 サーバーサイド ActionScript リファレンスガイド main.asc ファイルに Server-Side ActionScript ファイル(ASC)または JavaScript ファイル(JS)をロードします。 ActionScript ライブラリをロードするには、この関数を呼び出します。main.asc ファイルのロード、コンパイルおよび実行 が成功した後(ただし application.onAppStart() が呼び出される前に)、ロードされたファイルはコンパイルされ、実行されま す。指定のファイルのパスは、main.asc ファイルに関連して解決されます。 使用できるバージョン Flash Communication Server 1 パラメータ filename main.asc ファイルからスクリプトファイルへの相対パスを示す文字列。 例 次の例では、myLoadedFile.asc ファイルをロードします。 load("myLoadedFile.asc"); protectObject() protectObject(object) オブジェクトのメソッドをアプリケーションコードから保護します。アプリケーションコードは、メソッドに対して直接ア クセスまたは検査することはできません。この関数は、secure.asc ファイルにおいてのみ使用できます。 使用できるバージョン Flash Media Server 2 パラメータ object 保護されるプロジェクト。 戻り値 オブジェクト。 詳細 オブジェクトを保護した後は、オブジェクトをグローバル変数で参照したり、アクセス可能なオブジェクトのメンバーにし たりしないでください。protectObject() によって返されたオブジェクトは、すべてのメソッド呼び出しをバックエンドのオ ブジェクトに送信しますが、メンバーデータへのアクセスはブロックします。結果として、直接的にメンバーを列挙または 変更することはできません。保護されているオブジェクトは、未解決の参照をバックエンドのオブジェクトに保存します。 このユーザーオブジェクトはラッパーオブジェクトが必ず有効であるようにします。参照されている間、保護されているオ ブジェクトは通常の参照に従い、存在します。 Flash Media Interactive Server には、セキュアモードと通常モードの 2 つのスクリプト実行モードがあります。セキュア モードでは、secure.asc ファイル(存在する場合)のみがロードされ、評価されます。その他のアプリケーションスクリプ トはロードされません。getGlobal() および protectObject() 関数は、セキュアモードでのみ使用可能です。これらは非常に効 力のある関数です。これらの関数によって、スクリプト実行環境への全面的なアクセスが提供され、システムオブジェクト の作成が可能となります。secure.asc ファイルがロードされると、サーバーは、通常のスクリプト実行モードに切り替えま す。通常モードは、そのアプリケーションがアンロードされるまで継続されます。 例 secure.asc の実行後、load() への呼び出しはユーザー定義のシステムコールを介して方向付けされます。次の例で示します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 4 サーバーサイド ActionScript リファレンスガイド var sysobj = {}; sysobj._load = load; // Hide the load function load = null; // Make it unavailable unpriviliged code. sysobj.load = function(fname){ // User-defined code to validate/modify fname return this._load(fname); } // Grab the global object. var global = getGlobal(); // Now protect sysobj and make it available as // "system" globally. Also, set its attributes // so that it is read-only and not deletable. global["system"] = protectObject(sysobj); setAttributes(global, "system", false, true, true); // Now add a global load() function for compatibility. // Make it read-only and nondeletable. global["load"] = function(path){ return system.load(path); } setAttributes(global, "load", false, true, true); 関連項目 LoadVars クラス setAttributes() setAttributes(object, propName, enumerable, readonly, permanent) 特定のメソッドとプロパティが列挙、書き込み、削除されるのを防ぎます。サーバーサイドスクリプトでは、オブジェクト 内のすべてのプロパティは、デフォルトで列挙、書き込みおよび削除が可能です。プロパティのデフォルト属性を変更する か、定数を定義するには、setAttributes() を呼び出します。 使用できるバージョン Flash Media Server 2 パラメータ object オブジェクト。 propName object パラメータ内のプロパティの名前を示す文字列。存在しないプロパティに対して設定された属性は無効で す。 enumerable 次の値のいずれか true、false または null。true の場合はプロパティを列挙可能に、false の場合は列挙不可能に します。null 値では、この属性は変更されません。列挙不可能なプロパティは、列挙されなくなります(obj の vari につい て)。 readonly 次の値のいずれか true、false または null。true の場合はプロパティを読み取り専用に、false の場合は書き込み可能 にします。null 値では、この属性は変更されません。新しい値を指定しようとする試みはすべて無視されます。通常は、プ ロパティが書き込み可能である間に値を指定し、その後でプロパティを読み取り専用に変更します。 permanent 次の値のいずれか true、false または null。true の場合はプロパティを永続的(削除不可能)に、false の場合は削 除可能にします。null 値では、この属性は変更されません。(deleteobj.prop を呼び出して、)永続的プロパティを削除しよ うとする試みはすべて無視されます。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 5 サーバーサイド ActionScript リファレンスガイド 例 次のコードは、resolve() メソッドが列挙に表示されないようにします。 Object.prototype.__resolve = function(methodName){ ... }; setAttributes(Object.prototype, "__resolve", false, null, null); 次の例では、Constants オブジェクト上で 3 つの定数を作成し、これらを永続的で読み取り専用にします。 Constants.KILO = 1000; setAttributes(Constants, "KILO", null, true, true); Constants.MEGA = 1000*Constants.KILO; setAttributes(Constants, "MEGA", null, true, true); Constants.GIGA = 1000*Constants.MEGA; setAttributes(Constants, "GIGA", null, true, true); setInterval() setInterval(function, interval[, p1, ..., pN]) setInterval(object.method, interval[, p1, ..., pN]) clearInterval() メソッドが呼び出されるまで、指定した時間間隔で関数またはメソッドを呼び出します。このメソッドによ り、サーバーサイドスクリプトはルーチンを実行できます。setInterval() メソッドが返す固有の ID を clearInterval() メソッド に渡して、ルーチンを停止することができます。 注意:標準 JavaScript では、setInterval() メソッドの追加シンタックスである setInterval(stringToEvaluate, timeInterval) をサ ポートしていますが、サーバーサイド ActionScript ではサポートしていません。 使用できるバージョン Flash Communication Server 1 パラメータ function Function オブジェクト。 object.method object で呼び出すメソッド。 interval function を呼び出すまでの時間をミリ秒で示す数値。 p1, ..., pN function に渡されるオプションのパラメータ。 戻り値 この呼び出しのための固有 ID を示す整数。間隔が設定されない場合は -1 を返します。 例 次の例では、匿名関数を使用して、メッセージ "interval called" をサーバーログに 1 秒ごとに送信します。 setInterval(function(){trace("interval called");}, 1000); 次の例でも、匿名関数を使用して、メッセージ “interval called” をサーバーログに 1 秒ごとに送信します。ただし、メッ セージは関数のパラメータとして渡します。 setInterval(function(s){trace(s);}, 1000, "interval called"); 次の例では、名前付き関数 callback1() を使用して、メッセージ "interval called" をサーバーログに送信します。 function callback1(){trace("interval called"); } setInterval(callback1, 1000); 次の例でも、名前付き関数 callback2() を使用して、メッセージ "interval called" をサーバーログに 1 秒ごとに送信します。た だし、メッセージは関数のパラメータとして渡します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 6 サーバーサイド ActionScript リファレンスガイド function callback2(s){ trace(s); } setInterval(callback2, 1000, "interval called"); 次の例では 2 つ目のシンタックスを使用します。 var a = new Object(); a.displaying=displaying; setInterval(a.displaying, 3000); displaying = function(){ trace("Hello World"); } 上記の例では 3 秒ごとに displaying() メソッドを呼び出し、メッセージ "Hello World" をサーバーログに送信します。 関連項目 clearInterval() trace() trace(expression) 式を評価し、値を出力します。trace() 関数を使用して、スクリプトをデバッグしたり、プログラミングノートを記録したり、 あるいはファイルのテスト中にメッセージを表示したりできます。trace 関数は、JavaScript の alert() 関数に似ています。 この式は Administration Console の Live Log パネルに表示されます。また、この式は、RootInstall\logs フォルダのサ ブディレクトリにある application.xx.log ファイルにパブリッシュされます。例えば、アプリケーションの名前が myVideoApp である場合、デフォルトのアプリケーションインスタンスのアプリケーションログは RootInstall\logs\_defaultVHost_\myVideoApp\_definst_ に置かれます。 使用できるバージョン Flash Communication Server 1 パラメータ expression 有効な式。可能な場合、expression の値は文字列に変換されます。 Application クラス Flash Media Server アプリケーションのすべてのインスタンスには、Application クラスの単一インスタンスであるアプリ ケーションオブジェクトがあります。アプリケーションオブジェクトを作成するためにコンストラクタ関数を使用する必要 はありません。アプリケーションオブジェクトは、アプリケーションがサーバーによってインスタンス化される際に自動的 に作成されます。 アプリケーションオブジェクトは、クライアント接続試行の受諾および拒否、クラスやプロキシの登録および登録解除、ア プリケーションのライフサイクルの管理に使用します。アプリケーションオブジェクトにはコールバック関数があり、アプ リケーションが開始または停止される場合およびクライアントが接続または接続解除される場合に呼び出されます。 使用できるバージョン Flash Communication Server 1 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 7 サーバーサイド ActionScript リファレンスガイド プロパティ一覧 プロパティ 説明 application.allowDebug Administration API approveDebugSession() メソッドを使用してアプリケーションにアクセスすること を管理者に許可(true)または許可しない(false)ブール値。 application.clients 読み取り専用。アプリケーションに接続しているすべてのクライアントのリストを格納する Array オブ ジェクト。 application.config Application.xml 設定ファイルに含まれる ApplicationObject エレメントのプロパティにアクセスするこ とができます。 application.hostname 読み取り専用。デフォルトの仮想ホストが稼動するサーバーのホスト名およびその他すべての仮想ホスト の仮想ホスト名。 application.name 読み取り専用。アプリケーションインスタンスの名前。 application.server 読み取り専用。サーバーのプラットフォームおよびバージョン。 メソッド一覧 メソッド 説明 application.acceptConnection() クライアントからサーバーへの接続呼び出しを受諾します。 application.broadcastMsg() アプリケーションインスタンスに接続しているすべてのクライアントにメッセージをブロード キャストします。 application.clearSharedObjects() soPath パラメータで指定された永続共有オブジェクトファイル(FSO ファイル)を削除し、ア クティブな共有オブジェクト(永続、非永続とも)からすべてのプロパティを消去します。 application.clearStreams() アプリケーションインスタンスに関連付けられている記録ストリームファイルを消去します。 application.disconnect() アプリケーションに対するクライアント接続を終了します。 application.gc() ガベージコレクターを呼び出して、未使用のリソースをこのアプリケーションインスタンス用に 再要求します。 application.getStats() アプリケーションに関する統計を返します。 application.redirectConnection() 接続を拒否し、リダイレクト URL を示します。 application.registerClass() 特定のクラスタイプのオブジェクトをデシリアライズするときに使用するコンストラクタ関数を 登録します。 application.registerProxy() メソッドの呼び出しを他の関数にマップします。 application.rejectConnection() クライアントからサーバーへの接続呼び出しを拒否します。 application.shutdown() アプリケーションインスタンスをアンロードします。 イベントハンドラ一覧 イベントハンドラ 説明 application.onAppStart() サーバーがアプリケーションインスタンスをロードすると呼び出されます。 application.onAppStop() サーバーがアプリケーションインスタンスをアンロードしようとすると呼び出されます。 application.onConnect() クライアントから NetConnection.connect() が呼び出されると呼び出されます。 application.onConnectAccept() クライアントがアプリケーションに正常に接続すると、呼び出されます。バージョン 2 のコンポー ネントと共に使用する場合に限ります。 application.onConnectReject() コンポーネントを含むアプリケーションで接続が拒否されると呼び出されます。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 8 サーバーサイド ActionScript リファレンスガイド イベントハンドラ 説明 application.onDisconnect() クライアントがアプリケーションとの接続を切断すると、呼び出されます。 application.onPublish() クライアントがアプリケーションにストリームをパブリッシュすると呼び出されます。 application.onStatus() このアプリケーションインスタンスを宛先とするメッセージをサーバーが処理している間、エラー が発生すると呼び出されます。 application.onUnpublish() クライアントがアプリケーションに対するストリームのパブリッシュを停止すると呼び出されま す。 application.acceptConnection() application.acceptConnection(clientObj) クライアントからサーバーへの接続呼び出しを受諾します。 使用できるバージョン Flash Communication Server 1 パラメータ clientObj Client オブジェクト。受諾するクライアント。 詳細 NetConnection.connect() がクライアントサイドから呼び出されると、Client オブジェクトがサーバーの application.onConnect() に渡されます。クライアントからの接続を受諾するには、application.onConnect() イベントハンドラ の application.acceptConnection() を呼び出します。このメソッドが呼び出されると、info.code プロパティが "NetConnection.Connect.Success" に設定された NetConnection.onStatus() がクライアントで呼び出されます。 ユーザー名とパスワードの確認などのために保留状態になっていたクライアント接続を受諾する場合は、 application.onConnect() イベントハンドラの外部で application.acceptConnection() メソッドを使用します。 このメソッドが呼び出されると、info.code プロパティが "NetConnection.Connect.Success" に設定された NetConnection.onStatus() がクライアントで呼び出されます。詳細については、NetStatusEvent.info プロパティ (『ActionScript 3.0 コンポーネントリファレンスガイド』)または NetConnection.onStatus() エントリ(『Adobe Flash Media Server ActionScript 2.0 リファレンスガイド』)を参照してください。 注意:バージョン 2 のコンポーネントを使用する場合は、onConnect() ハンドラの(実行順における)最終行は、(アプリ ケーションを保留状態のままにしない限り)application.acceptConnection() または application.rejectConnection() になります。 また、acceptConnection() または rejectConnection() に続くロジックは、無視されないようにするために、 application.onConnectAccept() および application.onConnectReject() ハンドラ内に置かれなくてはなりません。 例 次のサーバーサイドコードは、クライアント接続を受諾し、クライアント ID をトレースします。 application.onConnect = function(client){ // Accept the connection. application.acceptConnection(client); trace("connect: " + client.id); }; 注意:上記の例は、コンポーネントを使用していないアプリケーションのコードです。 application.allowDebug application.allowDebug FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 9 サーバーサイド ActionScript リファレンスガイド Administration API approveDebugSession() メソッドを使用してアプリケーションにアクセスすることを管理者に許可 (true)または許可しない(false)ブール値。デバッグ接続によって、管理者は Administration Console で共有オブジェク トとストリームに関する情報を表示することができます。 このプロパティのデフォルト値は false で、Application.xml ファイルで設定されています。 ... false ... サーバーサイドスクリプトで application.allowDebug を true に設定すると、Application.xml ファイルの値が上書きされま す。アプリケーションの共有オブジェクトおよびストリームに関する情報を Administration Console に表示するには、 コードに次の行を追加します。 application.allowDebug = true; 使用できるバージョン Flash Media Server 2 application.broadcastMsg() application.broadcastMsg(cmd [, p1,..., pN]) アプリケーションインスタンスに接続しているすべてのクライアントにメッセージをブロードキャストします。メッセージ を処理するには、クライアントが NetConnection オブジェクトのハンドラを cmd パラメータと同じ名前に定義する必要が あります。 使用できるバージョン Flash Media Server 2 パラメータ cmd 文字列。ブロードキャストするメッセージ。メッセージを処理するには、クライアントサイドの NetConnection オブ ジェクトでハンドラを cmd と同じ名前に定義します。 p1,..., pN 文字列。ブロードキャストに追加されるメッセージ。 例 次のサーバーサイドコードがクライアントへのメッセージを送信します。 application.broadcastMsg("testMessage", "Hello World"); 次のクライアントサイドコードが送信されたメッセージを受け取り、“Hello World” と出力します。 nc = new NetConnection(); nc.testMessage = function(msg){ trace(msg); }; application.clearSharedObjects() application.clearSharedObjects(soPath) FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 10 サーバーサイド ActionScript リファレンスガイド soPath パラメータで指定された永続共有オブジェクトファイル(FSO ファイル)を削除し、アクティブな共有オブジェクト (永続、非永続とも)からすべてのプロパティを消去します。永続的な共有オブジェクトからすべてのプロパティを削除した 場合でも、clearSharedObjects() を呼び出さない限り、FSO ファイルはサーバー上に残ります。 使用できるバージョン Flash Communication Server 1 パラメータ soPath 共有オブジェクトの Uniform Resource Identifier(URI)を示す文字列。 soPath パラメータは、共有オブジェクトの名前を指定します。共有オブジェクト名では、パス内の複数のディレクトリをス ラッシュ (/) で区切ることができます。パスの最後のエレメントには、ワイルドカードパターン ( 例えば、疑問符 [?] やアス タリスク [*]) または共有オブジェクト名を置くことができます。application.clearSharedObjects() メソッドは、指定されたパ スに従って共有オブジェクトの階層をトラバースし、すべての共有オブジェクトを消去します。スラッシュ(/)を指定する と、そのアプリケーションインスタンスに関連付けられたすべての共有オブジェクトが消去されます。 soPath が現在アクティブな共有オブジェクトに一致した場合は、共有オブジェクトのすべてのプロパティが削除され、共有 オブジェクトのすべての加入者に clear イベントが送信されます。それが永続共有オブジェクトの場合は、永続的に保存され ているものも消去されます。 soPath パラメータには次の値を指定できます。 • / は、インスタンスに関連付けられたすべてのローカル共有オブジェクトおよび永続共有オブジェクトを消去します。 • /foo/bar は、共有オブジェクト /foo/bar を消去します。bar がディレクトリ名の場合、共有オブジェクトは削除されませ ん。 • /foo/bar/* は、/foo/bar ディレクトリに保存されているすべての共有オブジェクトを消去します。このネームスペース内 に使用中の永続共有オブジェクトがない場合は、bar ディレクトリも削除されます。 • /foo/bar/XX?? は、XX で始まり、そのあとに任意の 2 キャラクタが続く名前の共有オブジェクトをすべて消去します。こ の指定と一致するディレクトリ名がある場合は、そのディレクトリにあるすべての共有オブジェクトが消去されます。 戻り値 指定したパスの共有オブジェクトが削除された場合はブール値 true、失敗した場合は false。ワイルドカードキャラクタを使 用して複数のファイルを削除する場合、メソッドは、ワイルドカードパターンと一致するすべての共有オブジェクトが正常 に削除されたときに限って true を返します。削除が失敗した場合は false を返します。 例 次の例では、インスタンスに対するすべての共有オブジェクトを消去します。 function onApplicationStop(){ application.clearSharedObjects("/"); } application.clearStreams() application.clearStreams(streamPath) アプリケーションインスタンスに関連付けられている記録ストリームファイルを消去します。このメソッドを使用すると、 1 個のストリームの消去、アプリケーションインスタンスに関連付けられたすべてのストリームの消去、アプリケーション インスタンスの特定のサブディレクトリに存在しているストリームだけの消去、あるいは指定したワイルドカードパターン と一致する名前を持ったストリームだけの消去が可能です。 現在記録中のストリームに対して clearStreams() メソッドが呼び出されると、その記録ファイルは長さ 0 に設定され(消去さ れ)、内部キャッシュデータも消去されます。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 11 サーバーサイド ActionScript リファレンスガイド application.clearStreams() を呼び出すと、Stream.onStatus() ハンドラが呼び出され、呼び出しの成功または失敗に関する情報 を含む情報オブジェクトが渡されます。 注意:Administration API の removeApp() メソッドを使用して、1 つのアプリケーションインスタンスの全リソースを削 除することもできます。 使用できるバージョン Flash Communication Server 1 パラメータ streamPath ストリームの Uniform Resource Identifier(URI)を示す文字列。 streamPath パラメータは、アプリケーションのインスタンスディレクトリと相対的な、ストリームの名前と場所を指定しま す。このパラメータでは、パス内の複数のディレクトリをスラッシュ (/) で区切ることができます。パスの最後のエレメン トには、ワイルドカードパターン(例えば、疑問符 [?] やアスタリスク [*])またはストリーム名を置くことができます。 clearStreams() メソッドは、指定されたパスに従ってストリームの階層をトラバースし、指定されたワイルドカードパターン と一致する記録ストリームをすべて消去します。スラッシュを指定すると、そのアプリケーションインスタンスに関連付け られたすべてのストリームが消去されます。 FLV、F4V または MP3 ファイルを消去するには、ストリームのパスの前に flv:、mp4: または mp3: を置きます。.flv および .mp3 が前提となるため、flv: または mp3: を指定した場合は、ファイル拡張子を指定する必要はありません。ただし、 application.clearStreams("mp4:foo") を呼び出した場合、サーバーでは foo.mp-4、foo.mov、foo.f4v など、名前が「foo」で あるファイルが MPEG-4 コンテナ内で削除されます。特定のファイルを削除するには、呼び出し内のファイル拡張子を渡 します。例えば application.clearStreams(「mp4:foo.f4v」) のようにします。 注意:ストリームのパスの前にファイル形式を付けない場合は、FLV ファイルだけが削除されます。 以下は、streamPath パラメータに使用可能な値の例です。 • flv:/ は、アプリケーションインスタンスに関連付けられているすべての FLV ストリームを消去します。 • mp3:/ は、アプリケーションインスタンスに関連付けられているすべての MP3 ファイルを消去します。 • mp4:/ は、アプリケーションインスタンスに関連付けられているすべての F4V ストリーム(foo.mp4、foo.f4v など)を 消去します。 • mp4:foo.mp4 は、foo.mp4 ファイルを消去します。 • mp4:foo.mov は、foo.mov ファイルを消去します。 • mp3:/mozart/requiem は、アプリケーションインスタンスの /mozart サブディレクトリから、requiem.mp3 という名前 の MP3 ファイルを消去します。 • mp3:/mozart/* は、アプリケーションインスタンスの /mozart サブディレクトリからすべての MP3 ファイルを消去しま す。 • /report は、アプリケーションインスタンスディレクトリからストリームファイル report.flv を消去します。 • /presentations/intro は、アプリケーションインスタンスの /presentations サブディレクトリから記録ストリームファイル intro.flv を消去します。intro がディレクトリ名の場合、ストリームは削除されません。 • /presentations/* は、アプリケーションインスタンスの /presentations サブディレクトリからすべての FLV ファイルを消 去します。このネームスペース内に使用中のストリームがない場合は、/presentation サブディレクトリも削除されま す。 • /presentations/report?? は、report で始まり、そのあとに任意の 2 キャラクタが続くすべての FLV ファイルを消去しま す。指定されたディレクトリリストにディレクトリが含まれる場合は、各ディレクトリの中の、report?? と一致するスト リームがすべて消去されます。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 12 サーバーサイド ActionScript リファレンスガイド 戻り値 指定したパスのストリームが削除された場合はブール値 true、失敗した場合は false。ワイルドカードキャラクタを使用して 複数のストリームファイルを消去する場合、メソッドは、ワイルドカードパターンと一致するすべてのストリームが正常に 削除されたときに限って true を返します。削除が失敗した場合は false を返します。 例 次の例では、すべての記録ストリームを消去します。 function onApplicationStop(){ application.clearStreams("/"); } 次の例では、アプリケーションインスタンスの /disco サブディレクトリから、すべての MP3 ファイルを消去します。 function onApplicationStop(){ application.clearStreams("mp3:/disco/*"); } application.clients application.clients 読み取り専用。アプリケーションに接続しているすべてのクライアントのリストを格納する Array オブジェクト。配列内の 各エレメントは、Client オブジェクトに対する参照です。アプリケーションに接続されるユーザー数を決定するには、 application.clients.length プロパティを使用します。 ユーザーが接続を解除すると配列が短縮され、スロットを他の Client オブジェクトが再使用するため、呼び出し間のユー ザーを特定する場合は clients 配列の index 値は使用しないでください。 使用できるバージョン Flash Communication Server 1 例 次の例では、for ループを使用して、application.clients 配列の各エレメントを反復し、各クライアントに対して serverUpdate メソッドを呼び出します。 for (i = 0; i < application.clients.length; i++){ application.clients[i].call("serverUpdate"); } application.config application.config Application.xml 設定ファイルに含まれる ApplicationObject エレメントのプロパティにアクセスすることができます。設定 ファイルで設定したプロパティにアクセスするには、application.config プロパティを使用します。例えば、password エレメ ントの値を設定するには、コード application.config.password を使用します。 使用できるバージョン Flash Media Server 2 例 この例では、次に示す Application.xml ファイルのサンプルセクションを使用します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 13 サーバーサイド ActionScript リファレンスガイド jdoe engineering 次のコード行によって、user_name および dept_name プロパティにアクセスします。 trace("I am " + application.config.user_name + " and I work in the " + application.config.dept_name + " department."); trace("I am " + application.config["user_name"] + " and I work in the " + application.config["dept_name"] + " department."); 次のコードがアプリケーションログファイルと Administration Console に送信されます。 I am jdoe and I work in the engineering department. application.disconnect() application.disconnect(clientObj) アプリケーションに対するクライアント接続を終了します。このメソッドが呼び出されると、info.code が "NetConnection.Connect.Closed" に設定された NetConnection.onStatus() がクライアントで呼び出されます。また、 application.onDisconnect() ハンドラも呼び出されます。 使用できるバージョン Flash Communication Server 1 パラメータ clientObj 接続を解除するクライアントを示す Client オブジェクト。このオブジェクトは、application.clients 配列にある Client オブジェクトでなければなりません。 戻り値 切断が成功した場合はブール値 true、失敗した場合は false。 例 次の例では、application.disconnect() を呼び出して、アプリケーションインスタンスへのすべてのユーザーの接続を切断しま す。 function disconnectAll(){ for (i=0; i < application.clients.length; i++){ application.disconnect(application.clients[i]); } } application.gc() application.gc() ガベージコレクターを呼び出して、未使用のリソースをこのアプリケーションインスタンス用に再要求します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 14 サーバーサイド ActionScript リファレンスガイド 使用できるバージョン Flash Media Server 2 application.getStats() application.getStats() アプリケーションに関する統計を返します。 使用できるバージョン Flash Communication Server 1 戻り値 プロパティにアプリケーションインスタンスに関する統計を含むオブジェクト。次の表でプロパティについて説明します。 プロパティ 説明 bw_in 受信した合計キロバイト数。 bw_out 送信した合計キロバイト数。 bytes_in 送信した合計バイト数。 bytes_out 受信した合計バイト数。 msg_in 送信した Real-Time Messaging Protocol(RTMP)メッセージの合計数。 msg_out 受信した RTMP メッセージの合計数。 msg_dropped 欠落した RTMP メッセージの合計数。 server_bytes_in サーバーが受信した合計バイト数を示す数字。 server_bytes_out サーバーが送信した合計バイト数を示す数字。 total_connects アプリケーションインスタンスに接続しているクライアントの合計数。 total_disconnects アプリケーションインスタンスとの接続を解除したクライアントの合計数。 例 次の例では、Administration Console の Live Log パネルにアプリケーション統計が出力されます。 function testStats(){ var stats = application.getStats(); for(var prop in stats){ trace("stats." + prop + " = " + stats[prop]); } } application.onConnect = function(client){ this.acceptConnection(client); testStats(); }; application.hostname application.hostname 読み取り専用。デフォルトの仮想ホストが稼動するサーバーのホスト名およびその他すべての仮想ホストの仮想ホスト名。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 15 サーバーサイド ActionScript リファレンスガイド アプリケーションがデフォルトの仮想ホストで実行され、ある値が Server.xml 設定ファイルの ServerDomain エレメントで 設定されている場合、application.hostname プロパティには ServerDomain エレメントで設定された値が含まれます。 ServerDomain エレメントで値が設定されていない場合、プロパティは未定義になります。 デフォルト以外の仮想ホスト上でアプリケーションが実行されている場合、application.hostname プロパティには仮想ホスト の名前が格納されます。 使用できるバージョン Flash Communication Server 1.5 application.name application.name 読み取り専用。アプリケーションインスタンスの名前。 使用できるバージョン Flash Communication Server 1 例 次の例では、あるコードを実行する前に、name プロパティが特定の文字列と照合されます。 if (application.name == "videomail/work"){ // Insert code here. } application.onAppStart() application.onAppStart = function (){} サーバーがアプリケーションインスタンスを最初にロードすると呼び出されます。アプリケーションの状態を初期化するに は、このハンドラを使用します。onAppStart() イベントは、アプリケーションインスタンスの存続期間を通じて 1 回だけ呼 び出されます。 使用できるバージョン Flash Communication Server 1 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 16 サーバーサイド ActionScript リファレンスガイド 例 application.onAppStart = function (){ trace ("*** sample_guestbook application start"); // Create a reference to a persistent shared object. application.entries_so = SharedObject.get("entries_so", true); // Prevent clients from updating the shared object. application.entries_so.lock(); // Get the number of entries saved in the shared object // and save it in application.lastEntry. var maxprop = 0; var soProperties = application.entries_so.getPropertyNames(); trace("soProperties:" + soProperties); if (soProperties == null) { application.lastEntry = 0; } else { for (var prop in soProperties) { maxprop = Math.max (parseInt(prop), maxprop); trace("maxprop " + maxprop); } application.lastEntry = maxprop+1; } // Allow clients to update the shared object. application.entries_so.unlock(); trace("*** onAppStart called."); }; application.onAppStop() application.onAppStop = function (info){} サーバーがアプリケーションインスタンスをアンロードしようとすると呼び出されます。onAppStop() を使用して、アプリ ケーションの状態をフラッシュするか、アプリケーションがアンロードされるのを防ぐことができます。 イベントハンドラを呼び出すと実行される関数を定義します。その関数が true を返すと、アプリケーションがアンロードさ れます。その関数が false を返すと、アプリケーションはアンロードされません。このイベントハンドラに対して関数を定義 しない場合、または戻り値がブール値でない場合は、このイベントが呼び出されるとアプリケーションはアンロードされま す。 Flash Media Server アプリケーションは application.onAppStop() イベントに情報オブジェクトを渡します。サーバーサイド ActionScript でこの情報オブジェクトを監視して、定義される関数の動作を決定することができます。また、 application.onAppStop イベントを使用して、シャットダウンする前にユーザーに通知することもできます。 Administration Console または Server Administration API を使用して Flash Media Server アプリケーションをアン ロードする場合、application.onAppStop() は呼び出されません。したがって、application.onAppStop() を使用してアプリケー ションの終了をユーザーに通知することはできません。 使用できるバージョン Flash Communication Server 1 パラメータ info アプリケーションが終了する理由を示すプロパティを持つ、「情報オブジェクト」と呼ばれるオブジェクト。情報オブ ジェクトには、code プロパティおよび level プロパティがあります。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 17 サーバーサイド ActionScript リファレンスガイド Code プロパティ Level プロパティ 説明 Application.Shutdown status アプリケーションインスタンスがシャットダウンされようとしています。 Application.GC status アプリケーションインスタンスがサーバーによって破棄されようとしています。 戻り値 定義した関数があれば、その戻り値。ない場合は null。アプリケーションをアンロードする場合は、true、または false 以外 の値。アプリケーションのアンロードを拒否する場合は、false。 例 次の例では、アプリケーションが停止したときに entries_so 共有オブジェクトがフラッシュされます。 application.onAppStop = function (info){ trace("*** onAppStop called."); if (info=="Application.Shutdown"){ application.entries_so.flush(); } } application.onConnect() application.onConnect = function (clientObj [, p1, ..., pN]){} クライアントから NetConnection.connect() が呼び出されると呼び出されます。このハンドラには、接続しているクライアン トを表す Client オブジェクトが渡されます。ハンドラ内でクライアントに対する処理を実行するには、Client オブジェクト を使用します。例えば、この関数を使用して、クライアント接続を受諾、拒否またはリダイレクトしたり、認証を実行した り、NetConnection.call() からリモートで呼び出される Client オブジェクト上のメソッドを定義したり、Client.readAccess お よび Client.writeAccess プロパティを設定してサーバーサイドオブジェクトに対するクライアントアクセス権を決定したりす ることができます。 認証を実行する場合は、認証に必要なすべての情報を NetConnection.connect() メソッドから onConnect() ハンドラにパラ メータ(p1..., pN)として送信します。 onConnect() ハンドラを定義しないと、接続はデフォルトで受諾されます。 アプリケーションに対する接続要求が同時に複数存在する場合、サーバーは、その時点で実行中の application.onConnect() ハンドラが 1 個だけになるように、それらの要求をシリアライズします。クライアントの接続時間が長くならないようにす るためには、application.onConnect() 関数が短時間で実行されるようなコードを作成する必要があります。 注意:バージョン 2 のコンポーネントフレームワークを使用する場合(つまり、サーバーサイドのスクリプトファイルに components.asc ファイルをロードする場合)、クライアント接続を受託するためには、application.onConnectAccept() メ ソッドを使用する必要があります。 使用できるバージョン Flash Communication Server 1 パラメータ clientObj Client オブジェクト。このオブジェクトには、アプリケーションに接続しているクライアントに関する情報が含 まれています。 p1 ..., pN クライアントがアプリケーションに接続するとクライアントサイド NetConnection.connect() メソッドから application.onConnect() ハンドラに渡される、オプションのパラメータ。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 18 サーバーサイド ActionScript リファレンスガイド 戻り値 ブール値。true の場合はサーバーが接続を受諾します。false の場合はサーバーが接続を拒否します。 true が返された場合は、info.code が "NetConnection.Connect.Success" に設定されてクライアントで NetConnection.onStatus() が呼び出されます。false が返された場合は、info.code が "NetConnection.Connect.Rejected" に設定されてクライアントで NetConnection.onStatus() が呼び出されます。 null を返すか、値を返さないように指定すると、サーバーはクライアントを保留状態に置き、クライアントはメッセージを 送受信できなくなります。クライアントが保留状態に置かれた場合は、後で application.acceptConnection() または application.rejectConnection() を呼び出して、接続を受諾または拒否する必要があります。例えば、application.onConnect() イベントハンドラでアプリケーションサーバーへの NetConnection 呼び出しを行い、応答ハンドラが受信した情報に応じ て、応答ハンドラが application.acceptConnection() または application.rejectConnection() を呼び出すようにすることによっ て、外部認証を実行できます。 また、application.acceptConnection() または application.rejectConnection() を application.onConnect() イベントハンドラ内で 呼び出すこともできます。この場合、関数が返すいかなる値も無視されます。 注意:1 または 0 を返すことは、true または false を返すことと同じではありません。値 1 および 0 は、他の整数と同様に扱 われ、接続を受諾または拒否するものではありません。 application.onConnect(clientObject) NetConnection.connect() NetConnection.onStatus(info) info.code == NetConnection.Connect.Success true を返すか、 application.acceptConnection() を呼び出します NetConnection.onStatus(info) info.code == NetConnection.Connect.Rejected false を返すか、 application.rejectConnection() を呼び出します null を返すか、値を返しません。 アプリケーションを 保留状態に配置します A B A. クライアントサイド ActionScript B. サーバーサイド ActionScript 例 次の例は、onConnect() ハンドラで接続を受諾または拒否する 3 つの方法を示しています。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 19 サーバーサイド ActionScript リファレンスガイド (Usage 1) application.onConnect = function (clientObj [, p1, ..., pN]){ // Insert code here to call methods that do authentication. // Returning null puts the client in a pending state. return null; }; (Usage 2) application.onConnect = function (clientObj [, p1, ..., pN]){ // Insert code here to call methods that do authentication. // The following code accepts the connection: application.acceptConnection(clientObj); }; (Usage 3) application.onConnect = function (clientObj [, p1, ..., pN]) { // Insert code here to call methods that do authentication. // The following code accepts the connection by returning true: return true; }; 次の例では、ユーザーがパスワード "XXXX" を送信したかどうかを確認します。パスワードが送信されると、ユーザーのア クセス権が修正され、そのユーザーは接続を完了できます。この例では、ユーザーは、自分のディレクトリでは、ストリー ムおよび共有オブジェクトの作成とそれらへの書き込みが可能ですが、アプリケーションインスタンス内では、共有オブ ジェクトおよびストリームの読み取りおよび表示を行うことができます。 // This code should be placed in the global scope. application.onConnect = function (newClient, userName, password){ // Do all the application-specific connect logic. if (password == "XXXX"){ newClient.writeAccess = "/" + userName; this.acceptConnection(newClient); } else { var err = new Object(); err.message = "Invalid password"; this.rejectConnection(newClient, err); } }; パスワードが正しくない場合、そのユーザーは拒否され、message プロパティが "Invalid password" に設定された情報オブ ジェクトがクライアントサイドに返されます。このオブジェクトは、infoObject.application に割り当てられます。message プ ロパティにアクセスするには、クライアントサイドで次のコードを使用します。 ClientCom.onStatus = function (info.application.message){ trace(info.application.message); // Prints "Invalid password" // in the Output panel on the client side. }; application.onConnectAccept() application.onConnectAccept = function (clientObj [,p1, ..., pN]){} クライアントがアプリケーションに正常に接続すると、呼び出されます。バージョン 2 のコンポーネントと共に使用する場 合に限ります。コンポーネントを含むアプリケーションで受諾された接続の結果を処理するには、onConnectAccept() を使 用します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 20 サーバーサイド ActionScript リファレンスガイド バージョン 2 のコンポーネントフレームワーク(ActionScript 2.0 コンポーネント)を使用しない場合は、接続を受諾また は拒否した後に application.onConnect() ハンドラ内でコードを実行することができます。ただし、コンポーネントフレーム ワークを使用する場合、接続を受諾または拒否した後に実行するコードは、必ず application.onConnectAccept および application.onConnectReject イベントハンドラの中に置く必要があります。この構造により、すべてのコンポーネントにおい て接続を受諾するか拒否するかを決定することができます。 使用できるバージョン Flash Media Server(バージョン 2 のメディアコンポーネントと共に使用する場合のみ) パラメータ clientObj Client オブジェクト。アプリケーションに接続しているクライアント。 p1, ..., pN application.onConnectAccept() メソッドに渡されるオプションパラメータ。これらのパラメータは、クライアント がアプリケーションに接続したときに、クライアントサイドの NetConnection.connect() メソッドから渡されます。任意の ActionScript データ型を使用できます。 例 次の例はクライアントサイドコードを示しています。 nc = new NetConnection(); nc.connect("rtmp:/test","jlopes"); nc.onStatus = function(info) { trace(info.code); }; nc.doSomething = function(){ trace("doSomething called!"); } 次の例はサーバーサイドコードを示しています。 // When using components, always load components.asc. load("components.asc"); application.onConnect = function(client, username){ trace("onConnect called"); gFrameworkFC.getClientGlobals(client).username = username; if (username == "hacker") { application.rejectConnection(client); } else { application.acceptConnection(client); } } // Code is in onConnectAccept and onConnectReject statements // because components are used. application.onConnectAccept = function(client, username){ trace("Connection accepted for "+username); client.call("doSomething",null); } application.onConnectReject = function(client, username){ trace("Connection rejected for "+username); } FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 21 サーバーサイド ActionScript リファレンスガイド application.onConnectReject() application.onConnectReject = function (clientObj [,p1, ..., pN]){} コンポーネントを含むアプリケーションで接続が拒否されると呼び出されます。 バージョン 2 のコンポーネントフレームワークを使用しない場合は、接続を受諾または拒否した後に application.onConnect() ハンドラ内でコードを実行することができます。ただし、コンポーネントフレームワークを使用す る場合、接続を受諾または拒否した後に実行するコードは、必ず application.onConnectAccept および application.onConnectReject フレームワークイベントハンドラの中に置く必要があります。この構造により、すべてのコン ポーネントにおいて接続を受諾するか拒否するかを決定することができます。 使用できるバージョン Flash Media Server(バージョン 2 のコンポーネントと共に使用する場合のみ) パラメータ clientObj Client オブジェクト。アプリケーションに接続しているクライアント。 p1, ..., pN application.onConnectReject() ハンドラに渡されるオプションパラメータ。これらのパラメータは、クライアント がアプリケーションに接続したときに、クライアントサイドの NetConnection.connect() メソッドから渡されます。 例 次の例は、アプリケーションのために使用可能なクライアントサイドのコードです。 nc = new NetConnection(); nc.connect("rtmp:/test","jlopes"); nc.onStatus = function(info) { trace(info.code); }; nc.doSomething = function(){ trace("doSomething called!"); } 次の例は、main.asc ファイルにインクルード可能なサーバーサイドのコードです。 // When using components, always load components.asc. load( "components.asc" ); application.onConnect = function(client, username){ trace("onConnect called"); gFrameworkFC.getClientGlobals(client).username = username; if (username == "hacker") { application.rejectConnection(client); } else { application.acceptConnection(client); } } application.onConnectAccept = function(client, username){ trace("Connection accepted for "+username); client.call("doSomething",null); } application.onConnectReject = function(client, username){ trace("Connection rejected for "+username); } FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 22 サーバーサイド ActionScript リファレンスガイド application.onDisconnect() application.onDisconnect = function (clientObj){} クライアントがアプリケーションとの接続を切断すると、呼び出されます。このイベントハンドラは、クライアントの状態 情報をフラッシュする場合、またはあるユーザーがアプリケーションを終了することを他のユーザーに通知する場合に使用 します。このハンドラはオプションです。 注意:クライアントがアプリケーションとの接続を解除した後は、接続が解除されたクライアントに、このメソッドを使用 してデータを送り返すことはできません。 使用できるバージョン Flash Communication Server 1 パラメータ clientObj Client オブジェクト。アプリケーションとの接続を切断しているクライアント。 戻り値 サーバーは、戻り値をすべて無視します。 例 この例では、クライアントがアプリケーションから切断されるときに、接続されているすべてのクライアントに通知します。 クライアントサイドの FLA ファイルには、nameText という名前の入力テキストフィールド、statusText という名前の動的テ キストフィールド、connectButton という名前のボタンが含まれます。ユーザは、入力テキストフィールドに名前を入力しま す。クライアントサイドコードは、次のように、NetConnection.connect() の呼び出しで名前をサーバーに渡します。 nc = new NetConnection(); nc.userDisconnects = function(name) { statusText.text = name + ": disconnected"; } nc.onStatus = function(info){ statusText.text = info.code; } connectButton.onPress = function() { nc.connect("rtmp://localhost/testapp", nameText.text); }; サーバーサイドの onConnect() ハンドラは、ユーザ名をクライアントサイドコードから受け取り、Client オブジェクトのプ ロパティに割り当てます。クライアントがアプリケーションから切断すると、サーバーは Client オブジェクトを onDisconnect() ハンドラに渡します。onDisconnect() ハンドラの内部の Client.call() メソッドは、クライアントの userDisconnects メソッドを呼び出して、切断しているクライアントの名前を渡します。クライアントは、切断したユーザの 名前を表示します。 application.onConnect = function(client, name){ client.name = name; trace(client.name + ": onConnect"); return true; } application.onDisconnect = function(client){ for (var i = 0; i < application.clients.length; i++){ application.clients[i].call("userDisconnects", null, client.name); } trace(client.name + ": onDisconnect"); } 注意:オプションのパラメータを Client.call() メソッドに渡すには、2 番目の(responseObject)パラメータに null を渡しま す。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 23 サーバーサイド ActionScript リファレンスガイド application.onPublish() application.onPublish = function (clientObj, streamObj){} クライアントがアプリケーションにストリームをパブリッシュすると呼び出されます。このイベントハンドラは、大規模な ライブブロードキャスト用のアプリケーションを構築する場合に、他のサーバーにトラフィックを送信するために使用しま す。これは「マルチポイントパブリッシュ」と呼ばれます。例えば、1 つの都市にあるオリジンサーバー(サーバー A)か ら 2 つの異なる都市にある 2 つのオリジンサーバー(サーバー B およびサーバー C)にトラフィックを送信することで、複 数の地理的な場所にいる加入者をサポートすることができます。次に、このようなシナリオでのワークフローを示します。 1 あるクライアントのパブリッシュ元がサーバー A に接続し、パブリッシュを開始します。 2 サーバー A は、サーバーサイドスクリプトのイベントハンドラ application.onPublish() から通知を受け取ります。 3 onPublish() ハンドラ内で、サーバー B とサーバー C に対する 2 つの NetStream オブジェクトを作成します。 4 パブリッシュされたデータをサーバー A からサーバー B およびサーバー C にリダイレクトするには、 NetStream.publish() メソッドを呼び出します。 5 サーバー B とサーバー C に接続している受信者は、同一のライブストリームを受信します。 この例では、パブリッシュ元のクライアントはサーバー A だけに接続してパブリッシュします。データフローの残りの部分 は、サーバーサイドスクリプト内のロジックによって処理されます。 注意:このハンドラ内の Client オブジェクトのプロパティを変更することはできません。 使用できるバージョン Flash Media Interactive Server 3 および Flash Media Development Server 3 パラメータ clientObj Client オブジェクト。アプリケーションにストリームをパブリッシュしているクライアント。 streamObj ストリームオブジェクト。アプリケーションにパブリッシュされているストリーム。 戻り値 サーバーは、戻り値をすべて無視します。 application.onStatus() application.onStatus = function (infoObject){} このアプリケーションインスタンスを宛先とするメッセージをサーバーが処理している間、エラーが発生すると呼び出され ます。application.onStatus() ハンドラは、ハンドラを検出しないすべての Stream.onStatus() メッセージまたは NetConnection.onStatus() メッセージを処理します。また、application.onStatus() のみに適用されるステータス呼び出しもい くつかあります。 使用できるバージョン Flash Communication Server 1 パラメータ infoObject アプリケーションのステータスに関する情報を含む code および level プロパティを持つオブジェクト。一部の情 報オブジェクトは、details および description プロパティも持っています。次の表は、情報オブジェクトのプロパティ値を示 しています。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 24 サーバーサイド ActionScript リファレンスガイド Code プロパティ Level プロパティ 説明 Application.Script.Error error ActionScript エンジンがランタイムエラーに遭遇しました。 この情報オブジェクトには、次のプロパティもあります。 Application.Script.Warning warning • filename:エラーが発生している ASC ファイルの名前。 • lineno:エラーが発生している行の番号。 • linebuf:エラーが発生している行のソースコード。 ActionScript エンジンがランタイム警告に遭遇しました。 この情報オブジェクトには、次のプロパティもあります。 Application.Resource.LowMemory warning • filename:エラーが発生している ASC ファイルの名前。 • lineno:エラーが発生している行の番号。 • linebuf:エラーが発生している行のソースコード。 ActionScript エンジンのランタイムメモリが不足しています。アプリケー ションインスタンスが、リソースの一部を解放するなどの適切な措置を講 じるための機会を提供します。 アプリケーションインスタンスがメモリを消費し尽した場合、このアプリ ケーションインスタンスはアンロードされ、すべてのユーザーの接続が切 断されます。この状態では、サーバーは application.onDisconnect() イベ ントハンドラまたは application.onAppStop() イベントハンドラを呼び出し ません。 戻り値 コールバック関数が返す値 例 application.onStatus = function(info){ trace("code: " + info.code + " level: " + info.level); trace(info.code + " details: " + info.details); }; // Application.Script.Warning level: warning application.onUnpublish() application.onUnpublish = function (clientObj, streamObj){} クライアントがアプリケーションに対するストリームのパブリッシュを停止すると呼び出されます。大規模なライブブロー ドキャスト用のアプリケーションを構築する場合は、このイベントハンドラを application.onPublish() と共に使用して、他の サーバーにトラフィックを送信します。 注意:このハンドラ内の Client オブジェクトのプロパティを変更することはできません。 使用できるバージョン Flash Media Interactive Server 3 および Flash Media Development Server 3 パラメータ clientObj Client オブジェクト。アプリケーションにストリームをパブリッシュしているクライアント。 streamObj ストリームオブジェクト。アプリケーションにパブリッシュされているストリーム。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 25 サーバーサイド ActionScript リファレンスガイド 戻り値 サーバーは、戻り値をすべて無視します。 application.redirectConnection() application.redirectConnection(clientObj, url[, description[, errorObj]]) 接続を拒否し、リダイレクト URL を示します。NetConnection.onStatus() ハンドラに、リダイレクトを検出して新しい接続 URL を NetConnection.connect() メソッドに送信するロジックを記述する必要があります。 このメソッドを呼び出すと、クライアントで NetConnection.onStatus() が呼び出され、次の値を指定した情報オブジェクト が渡されます。 プロパティ 値 info.code "NetConnection.Connect.Rejected" info.description この値は説明パラメータで渡されます。パラメータに渡された値がない場合、デフォルト値は 「Connection failed」 になります。 info.ex.code 302 info.ex.redirect 新しい接続 URL info.level "Error" 使用できるバージョン Flash Media Interactive Server 3 および Flash Media Development Server 3 パラメータ clientObj 拒否するクライアントを指定するクライアントオブジェクト。 url 新しい接続 URL を指定する文字列。 注意:このパラメータを省略すると、代わりに rejectConnection() が呼び出されます。 description 接続がリダイレクトされた場合に、より詳細な情報を提供できる文字列。 errorObj 拒否の理由を説明する任意のタイプのオブジェクト。これはそのクライアントに送信されます。errorObj オブジェ クトは、接続の拒否時に NetConnection.onStatus() 呼び出しに渡す情報オブジェクトの application プロパティとして、クラ イアントサイドのスクリプトで使用することができます。 例 次の例はサーバーサイドコードを示しています。 application.onConnect = function(clientObj, count){ var err = new Object(); err.message = "This is being rejected"; err.message2 = "This is the second message. with number description"; if (count == 1){ redirectURI = "rtmp://www.example.com/redirected/fromScript"; redirectDescription = "this is being rejected via Server Side Script."; } else if (count == 2){ redirectURI = "rtmp://www.example2.com/redirected/fromScript"; redirectDescription = "this is being rejected via Server Side Script."; } application.redirectConnection(clientObj, redirectURI, redirectDescription, err); } FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 26 サーバーサイド ActionScript リファレンスガイド 次の例はクライアントサイド ActionScript 3.0 コードを示しています。 var theConnection:NetConnection; var theConnection2:NetConnection; var client:Object = new Object(); function init():void{ connect_button.label = "Connect"; disconnect_button.label = "Disconnect"; connect_button.addEventListener(MouseEvent.CLICK, buttonHandler); disconnect_button.addEventListener(MouseEvent.CLICK, buttonHandler); } function buttonHandler(event:MouseEvent){ switch (event.target){ case connect_button : doConnect(); break; case disconnect_button : disConnect(); break; } } function doConnect(){ makeConnection(theURI.text); } function disConnect(){ theConnection.close(); }to function makeConnection(uri:String){ if (theConnection){ theConnection.close(); } theConnection = new NetConnection(); theConnection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); theConnection.client = client; theConnection.connect(uri); } function makeConnection2(uri:String){ if (theConnection2){ theConnection2.close(); } theConnection2 = new NetConnection(); FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 27 サーバーサイド ActionScript リファレンスガイド theConnection2.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); theConnection2.client = client; theConnection2.connect(uri); } function netStatusHandler(event:NetStatusEvent):void{ //Check the Redirect code and make connection to redirect URI if appropriate. try{ if (event.info.ex.code == 302){ var redirectURI:String; redirectURI = event.info.ex.redirect; if (redirectURI.charCodeAt(redirectURI.length-1) == 13){ redirectURI = redirectURI.slice(0,(redirectURI.length-1)); } makeConnection2(redirectURI); } } } init(); application.registerClass() application.registerClass(className, constructor) 特定のクラスタイプのオブジェクトをデシリアライズするときに使用するコンストラクタ関数を登録します。クラスのコン ストラクタを登録していないと、デシリアライズされたオブジェクトのメソッドを呼び出せません。このメソッドは、クラ スのコンストラクタの登録を解除するときにも使用します。これは、サーバーの使用法としては上級の部類に属するもので あり、クライアントとサーバー間で ActionScript オブジェクトを送信するときのみ必要となります。 クライアントとサーバーは、ネットワーク接続によって通信します。したがって、タイプ指定オブジェクトを使用している 場合は、クライアントサイドとサーバーサイドに、両サイドで使用される同じオブジェクトのプロトタイプがそれぞれ存在 しなければなりません。つまり、クライアントサイドとサーバーサイドの両方の ActionScript で、それぞれが共有するデー タのタイプを定義し、宣言する必要があるということです。こうすることによって、クライアント上のオブジェクト、メ ソッドまたはプロパティと、サーバー上の対応するエレメントとの間に明確な相互関係が確立されます。 application.registerClass では、サーバーサイドのオブジェクトのクラスタイプを登録し、それによって、クラスで定義され たメソッドを使用することができます。 コンストラクタ関数は、プロパティとメソッドの初期化に使用します。サーバーコードの実行には使用しません。コンスト ラクタ関数は、クライアントからのメッセージが受信されると自動的に呼び出されるため、不正クライアントによって実行 された場合を考慮して「安全」なものにしておく必要があります。ハードディスクをいっぱいにしたり、プロセッサの処理 能力を浪費するなどの有害な状況を発生させる手順は定義しないようにします。 コンストラクタ関数は、オブジェクトのプロパティの設定前に呼び出されます。個々のクラスで、オブジェクトの初期化後 に呼び出される onInitialize() メソッドとそのすべてのプロパティを定義することができます。このメソッドは、オブジェク トのデシリアライズ後のデータ処理に使用できます。 プロトタイプが別のクラスに設定されたクラスを登録する場合は、プロトタイプの設定後に、プロトタイプコンストラクタ を元のクラスに設定し直す必要があります。この点については、次の 2 番目の例を参照してください。 注意:下記の例のように、クライアントサイドのクラスは function function_name(){} として定義する必要があります。正し い方法で定義されなかった場合、クライアントからサーバーにインスタンスが渡される際に application.registerClass() はクラ スを識別しなくなり、エラーが返されます。 使用できるバージョン Flash Communication Server 1 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 28 サーバーサイド ActionScript リファレンスガイド パラメータ className ActionScript クラスの名前を示す文字列。 constructor オブジェクトのデシリアライズ時に特定のクラスタイプのオブジェクトを作成するために使用するコンストラ クタ関数。コンストラクタ関数の名前は、className に指定した名前と同じでなければなりません。オブジェクトのシリア ライズ時には、コンストラクタ関数の名前がオブジェクトのタイプとしてシリアライズされます。クラスの登録を解除する には、constructor パラメータの値として null を渡します。シリアライズとは、オブジェクトをネットワークを介して別のコ ンピュータに送信できる形式のものに変換する、コンピュータプログラムによって実行される処理です。 例 次の例では、Color コンストラクタ関数を、プロパティおよびメソッドとともに定義します。アプリケーションの接続後、 registerClass() メソッドが呼び出され、タイプ Color のオブジェクトのクラスが登録されます。クライアントからサーバーに タイプ指定オブジェクトが送信されると、このクラスが呼び出されて、サーバーサイドのオブジェクトが作成されます。ア プリーションの停止後、registerClass() メソッドが再び呼び出され、このメソッドに値 null が渡されて、クラスの登録が解除 されます。 function Color(){ this.red = 255; this.green = 0; this.blue = 0; } Color.prototype.getRed = function(){ return this.red; } Color.prototype.getGreen = function(){ return this.green; } Color.prototype.getBlue = function(){ return this.blue; } Color.prototype.setRed = function(value){ this.red = value; } Color.prototype.setGreen = function(value){ this.green = value; } Color.prototype.setBlue = function(value){ this.blue = value; } application.onAppStart = function(){ application.registerClass("Color", Color); }; application.onAppStop = function(){ application.registerClass("Color", null); }; 次の例では、prototype プロパティを持つ application.registerClass() メソッドの使用法を示します。 function A(){} function B(){} B.prototype = new A(); // Set constructor back to that of B. B.prototype.constructor = B; // Insert code here. application.registerClass("B", B); application.registerProxy() application.registerProxy(methodName, proxyConnection [, proxyMethodName]) FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 29 サーバーサイド ActionScript リファレンスガイド メソッドの呼び出しを他の関数にマップします。このメソッドを使用して、同じ Flash Media Server または異なる Flash Media Server 上にある異なるアプリケーションインスタンス間で通信を行うことができます。クライアントは、接続先の、 任意のアプリケーションインスタンスのサーバーサイドメソッドを実行することができます。サーバーサイドスクリプトで は、このメソッドを使用して、同じサーバーまたは異なるサーバーにある、他のアプリケーションインスタンスに対するプ ロキシとなるメソッドを登録することができます。プロキシを削除する ( または、登録を解除する ) には、このメソッドを 呼び出して、proxyConnection パラメータに null を渡します。この場合、メソッドの登録をまったく行わないのと同じ結果 になります。 使用できるバージョン Flash Communication Server 1 パラメータ methodName メソッドの名前を示す文字列。このアプリケーションインスタンスに対する methodName の実行要求がすべ て、proxyConnection オブジェクトに転送されるようになります。 proxyConnection Client または NetConnection オブジェクト。methodName に指定したリモートメソッドの実行要求がす べて、proxyConnection パラメータに指定した Client または NetConnection オブジェクトに送信されます。結果が返され る場合は、呼び出し元に送信されます。プロキシの登録を解除する ( または、プロキシを削除する ) には、このパラメータ に値 null を指定します。 proxyMethodName methodName パラメータで指定されたメソッドと proxyMethodName が異なる場合に、proxyConnection パラメータで指定されたオブジェクトをサーバーが呼び出すメソッドの名前を示す文字列。これはオプションのパラメータ です。 戻り値 呼び出し元のクライアントに送信される値。 例 次の例では、アプリケーションの開始時に、application.onAppStart() イベントハンドラ内の関数で application.registerProxy() メソッドが呼び出され、実行されます。関数ブロック内では、myProxy という新しい NetConnection オブジェクトが作成 され、接続されます。その後、application.registerProxy() メソッドが呼び出され、メソッド getXyz() が myProxy オブジェク トに割り当てられます。 application.onAppStart = function(){ var myProxy = new NetConnection(); myProxy.connect("rtmp://xyz.com/myApp"); application.registerProxy("getXyz", myProxy); }; application.rejectConnection() application.rejectConnection(clientObj[, description[, errObj]) 注意:description パラメータは、Flash Media Interactive Server 3 および Flash Media Development Server 3 以降でサ ポートされています。 クライアントからサーバーへの接続呼び出しを拒否します。application.onConnect() ハンドラは、クライアントが NetConnection.connect() を呼び出したときに呼び出されます。application.onConnect() ハンドラでは、接続を受諾または拒 否できます。また、アプリケーションサーバーを呼び出して、接続を受諾または拒否する前にクライアントを認証すること もできます。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 30 サーバーサイド ActionScript リファレンスガイド 注意:バージョン 2 のコンポーネントを使用する場合は、onConnect() ハンドラの(実行順における)最終行は、(アプリ ケーションを保留状態のままにしない限り)application.acceptConnection() または application.rejectConnection() になります。 また、acceptConnection() または rejectConnection() に続くロジックは、無視されないようにするため、 application.onConnectAccept() および application.onConnectReject() ハンドラ内に置かれなくてはなりません。この要件を満 たす必要があるのは、バージョン 2 のコンポーネントを使用する場合だけです。 使用できるバージョン Flash Communication Server 1 パラメータ clientObj 拒否するクライアントを指定するクライアントオブジェクト。 description 接続がリダイレクトされた場合に、より詳細な情報を提供できる文字列。 errObj 拒否の理由を説明する任意のタイプのオブジェクト。これはそのクライアントに送信されます。errObj オブジェクト は、接続の拒否時に NetConnection.onStatus() 呼び出しに渡す情報オブジェクトの application プロパティとして、クライア ントサイドのスクリプトで使用することができます。 例 次の例では、クライアントが拒否されてエラーメッセージが送信されます。これはサーバーサイドコードです。 application.onConnect = function(client){ // Insert code here. var error = new Object();error.message = "Too many connections"; application.rejectConnection(client, error); }; これはクライアントサイドコードです。 clientConn.onStatus = function (info){ if (info.code == "NetConnection.Connect.Rejected"){ trace(info.application.message); // Sends the message // "Too many connections" to the Output panel // on the client side. } }; application.server application.server 読み取り専用。サーバーのプラットフォームおよびバージョン。 使用できるバージョン Flash Communication Server 1 例 次の例では、if ステートメント内のコードの実行前に、server プロパティが文字列と照合されます。 if (application.server == "Flash Media Server-Windows/1.0"){ // Insert code here. } application.shutdown() application.shutdown() FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 31 サーバーサイド ActionScript リファレンスガイド アプリケーションインスタンスをアンロードします。アプリケーションが仮想ホストまたはアプリケーションレベルの範囲 内で実行されている場合、アプリケーショインスタンスのみがアンロードされます。コアプロセスは引き続き実行されます。 アプリケーションがインスタンスの範囲内で実行している場合、このアプリケーションインスタンスはアンロードされ、コ アプロセスは終了します。このプロセスは非同期的に実行されます。このインスタンスのアンロードが実行されるのは、 shutdown() 呼び出しが戻るときではなく、アンロードシーケンスが開始されるときです。 shutdown() を呼び出すと、application.onAppStop() が呼び出され、接続されているクライアントの接続が解除され、各クラ イアントに対して application.onDisconnect() が呼び出されます。shutdown() を呼び出した後の呼び出しは実行されない場合 があります。 使用できるバージョン Flash Media Server 2 戻り値 成功(true)または失敗(false)を示すブール値。 Client クラス Client クラスでは、Flash Media Server アプリケーションインスタンスへの各ユーザー(つまり、クライアント)の接続を 処理することができます。ユーザーがアプリケーションに接続すると、サーバーによって自動的に Client オブジェクトが作 成されます。ユーザーがアプリケーションとの接続を切断すると、このオブジェクトは破棄されます。ユーザーは、接続先 の各アプリケーション用に固有の Client オブジェクトを持っています。何千もの Client オブジェクトを同時にアクティブ にすることができます。 Client クラスのプロパティを使用して、各クライアントのバージョン、プラットフォームおよび IP アドレスを判別するこ とができます。また、Stream オブジェクトや共有オブジェクトなどの様々なアプリケーションリソースに対して、書き込 み許可や読み取り許可を個別に設定できます。帯域幅制限の設定や、クライアントサイドスクリプトでのメソッドの呼び出 しには、Client クラスのメソッドを使用します。 クライアントサイドの ActionScript スクリプトから NetConnection.call() を呼び出す場合、サーバーサイドスクリプトで実 行するメソッドは Client クラスのメソッドでなければなりません。クライアントサイドスクリプトから呼び出すメソッド は、いずれもサーバーサイドスクリプトで定義する必要があります。また、サーバーサイドスクリプトで定義したメソッド は、いずれもサーバーサイドスクリプトの Client クラスインスタンスから直接呼び出すことができます。 Client クラスのすべてのインスタンス (1 つのアプリケーションの各クライアント ) で同じメソッドまたはプロパティが必要 な場合、それらのメソッドおよびプロパティをクラスの各インスタンスに追加するのではなく、クラス自体に追加できます。 これをクラスの 拡張といいます。クラスを拡張するには、クラスのコンストラクタ関数内でメソッドを定義したり、クラス の個々のインスタンスにメソッドを割り当てたりするのではなく、クラスのコンストラクタ関数の prototype プロパティに メソッドを割り当てます。prototype プロパティにメソッドおよびプロパティを割り当てると、それらのメソッドはそのクラ スのすべてのインスタンスに対して自動的に使用可能になります。 次のコードは、クラスの 1 インスタンスにメソッドとプロパティを割り当てる方法を示しています。application.onConnect() ハンドラでは、クライアントインスタンス clientObj がパラメータとしてサーバーサイドスクリプトに渡されます。その後、 このクライアントインスタンスにプロパティとメソッドを割り当てることができます。 application.onConnect = function(clientObj){ clientObj.birthday = myBDay; clientObj.calculateDaysUntilBirthday = function(){ // Insert code here. } }; FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 32 サーバーサイド ActionScript リファレンスガイド 上記のコード例は動作しますが、この場合、クライアントが接続するびにこのコードを実行する必要があります。一度の定 義で、application.clients 配列内のすべてのクライアントが同じメソッドとプロパティを使用できるようにするには、それら のメソッドとプロパティを Client クラスの prototype プロパティに割り当てます。 prototype プロパティによるビルトインクラスの拡張処理は、2 つのステップで構成されます。スクリプトでは、これらのス テップを任意の順序で記述することができます。次の例では、ビルトイン Client クラスを拡張します。最初のステップとし て、prototype プロパティに割り当てる関数を記述します。 // First step: write the functions. function Client_getWritePermission(){ // The writeAccess property is already built in to the Client class. return this.writeAccess; } function Client_createUniqueID(){ var ipStr = this.ip; // The ip property is already built in to the Client class. var uniqueID = "re123mn" // You would need to write code in the above line // that creates a unique ID for each client instance. return uniqueID; } // Second step: assign prototype methods to the functions. Client.prototype.getWritePermission = Client_getWritePermission; Client.prototype.createUniqueID = Client_createUniqueID; // A good naming convention is to start all class method // names with the name of the class followed by an underscore. また、プロパティを prototype に次のように追加することもできます。 Client.prototype.company = "Adobe"; メソッドは、どのインスタンスに対しても使用可能です。そのため、clientObj 引数が渡される application.onConnect() 内で、 次のコードを記述できます。 application.onConnect = function(clientObj){ var clientID = clientObj.createUniqueID(); var clientWritePerm = clientObj.getWritePermission(); }; 使用できるバージョン Flash Communication Server 1 プロパティ一覧 プロパティ 説明 Client.agent 読み取り専用。クライアントのバージョンおよびプラットフォーム。 Client.audioSampleAccess Flash Player が、指定したフォルダ内のストリームから生の非圧縮オーディオデータにアクセスできるよう にします。 Client.id 読み取り専用。クライアントを識別する文字列。 Client.jp 読み取り専用。クライアントの IP アドレスを含む文字列。 Client.pageUrl 読み取り専用。クライアント SWF ファイルが埋め込まれている Web ページの URL を含む文字列。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 33 サーバーサイド ActionScript リファレンスガイド プロパティ 説明 Client.protocol 読み取り専用。クライアントがサーバーに接続するために使用するプロトコルを示す文字列。 Client.readAccess クライアントに読み取りアクセス権が与えられているアプリケーションリソース(共有オブジェクトおよび ストリーム)を含むディレクトリの文字列。 Client.referrer 読み取り専用。接続の作成元の SWF ファイルまたはサーバーの URL を含む文字列。 Client.secure 読み取り専用。SSL 接続であるか(true)そうでないか(false)を示すブール値。 Client.uri 読み取り専用。このアプリケーションインスタンスに接続するためにクライアントによって指定された URI。 Client.videoSampleAccess Flash Player が、指定したフォルダ内のストリームから生の非圧縮ビデオデータにアクセスできるようにし ます。 Client.virtualKey サーバーに接続しているクライアントの仮想マッピング。 Client.writeAccess このクライアントに対して、アプリケーションリソース(共有オブジェクトやストリームなど)を格納する ディレクトリへの書き込みアクセス権を設定します。 メソッド一覧 メソッド 説明 Client.call() クライアントまたは別のサーバーでメソッドを実行します。 Client.checkBandwidth() 帯域幅を検出するには、クライアントサイドスクリプトからこのメソッドを呼び出します。 Client.getBandwidthLimit() クライアントまたはサーバーがこの接続で使用できる最大帯域幅を返します。 Client.getStats() クライアントの統計を返します。 Client.ping() クライアントに “ping” メッセージを送信し、応答を待ちます。 Client.remoteMethod() クライアントまたは別のサーバーが NetConnection.call() メソッドを呼び出すと呼び出されます。 Client.__resolve() 定義されていないプロパティの値を返します。 Client.setBandwidthLimit() このクライアントが使用できる、クライアントとサーバー間(どららか一方向または双方向)の接続の最 大帯域幅を設定します。 Client.agent clientObject.agent 読み取り専用。クライアントのバージョンおよびプラットフォーム。 クライアントがサーバーに接続すると、Client.agent の形式は次のようになります。 Operating_System Flash_Player_Version 例えば、Windows で Flash Player version 9.0.45.0 を実行している場合、Client.agent の値は次のようになります。 "WIN 9,0,45,0". 別の Flash Media Interactive Server に接続した場合、Client.agent の形式は次のようになります。 Server_Name/Server_Version Operating_System/Operating_System_Build 例えば、サーバーのバージョンが 3.0.0 で Windows Server 2003 で実行されている場合、Client.agent の値は次のようにな ります。 "FlashCom/3.0.0 WIN/5.1.2600". FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 34 サーバーサイド ActionScript リファレンスガイド 使用できるバージョン Flash Communication Server 1 例 次の例では、agent プロパティを文字列 "WIN" と照合し、一致の有無によって異なるコードを実行しています。このコード は、onConnect() 関数内で記述されています。 function onConnect(newClient, name){ if (newClient.agent.indexOf("WIN") > -1){ trace ("Window user"); } else { trace ("non Window user.agent is" + newClient.agent); } } Client.audioSampleAccess clientObject.audioSampleAccess Flash Player が、指定したフォルダ内のストリームから生の非圧縮オーディオデータにアクセスできるようにします。 現在再生中の waveform 用に生のサウンドデータを読み取るには、クライアントサイドの ActionScript 3.0 で SoundMixer.computeSpectrum() メソッドを呼び出します。詳細については、『ActionScript 3.0 コンポーネントリファレン スガイド』SoundMixer.computeSpectrum() の項目および『ActionScript 3.0 のプログラミング』の「生のサウンドデータへ のアクセス」を参照してください。 使用できるバージョン Flash Media Interactive Server 3 および Flash Media Development Server 3 例 次のサーバーサイドコードでは、audioSampleAccess ディレクトリが publicdomain に設定されます。 application.onConnect = function(client) { // Anyone can play free content, which is all streams placed under the // samples/, publicdomain/ and contrib/ folders. client.readAccess = "samples;publicdomain;contrib"; // Paying customers get to watch more streams. if ( isPayingCustomer(client)) client.readAccess += "nonfree;premium"; // Content can be saved (user recorded streams) to contrib/ folder. client.writeAccess = "contrib"; // Anyone can gain access to an audio snapshot of the publicdomain/ folder. client.audioSampleAccess = "publicdomain"; // Paying customers can also get a video snapshot of the publicdomain/ folder. if (isPayingCustomer(client)) client.videoSampleAccess = "publicdomain"; } 関連項目 Client.videoSampleAccess FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 35 サーバーサイド ActionScript リファレンスガイド Client.call() clientObject.call(methodName, [resultObj, [p1, ..., pN]]) クライアントサイドコードまたは別のサーバーでメソッドを実行します。リモートメソッドは、resultObj パラメータにデー タを返すことができます(パラメータがある場合)。リモートエージェントがクライアントでも別のサーバーでも、メソッド は、リモートエージェントの NetConnection オブジェクトで呼び出されます。 使用できるバージョン Flash Communication Server 1 パラメータ methodName リモートメソッドを示す文字列。この文字列は、"[objectPath/]method" という形式を使用します。例えば、文 字列 "someObj/doSomething" は、クライアントまたはリモートサーバー上で NetConnection.someObj.doSomething() メソッド を呼び出すよう、クライアントに指示します。文字列 "doAction" は、クライアントまたはリモートサーバー上で doAction() メソッドを呼び出します。 resultObj オブジェクト。これは、送信元が対象のクライアントからの戻り値を必要とする場合に指定する、オプションの パラメータです。パラメータを渡すだけで戻り値を必要としない場合は、値 null を渡します。結果オブジェクトには、ユー ザー定義の任意のオブジェクトを指定できます。効果的に使用するには、結果の着信時に呼び出される 2 つのメソッド、 onResult() および onStatus() を指定します。resultObj.onResult() イベントは、リモートメソッドの呼び出しが成功した場合に トリガされます。それ以外の場合は、resultObj.onStatus() イベントがトリガされます。 p1, ..., pN 他の ActionScript オブジェクトへの参照を含む、任意の ActionScript 型であるオプションのパラメータ。これ らのパラメータは、Flash クライアントでのメソッドの実行に methodName に渡されます。これらのオプションのパラメー タを使用する場合は、resultObj に何らかの値を渡す必要があります。戻り値を必要としない場合は、null 値を渡します。 戻り値 methodName の呼び出しが成功した場合はブール値 true、失敗した場合は false。 例 このクライアントサイドスクリプトの例では、乱数を生成する getNumber() という関数を定義します。 nc = new NetConnection(); nc.getNumber = function(){ return (Math.random()); }; nc.connect("rtmp:/clientCall"); 次のサーバーサイドスクリプトでは、application.onConnect() ハンドラ内の Client.call() が呼び出され、クライアントで定義 された getNumber() メソッドが呼び出されます。また、このサーバーサイドスクリプトでは、Client.call() メソッドで resultObj パラメータとして使用される、randHander() という関数も定義します。 randHandler = function(){ this.onResult = function(res){ trace("Random number: " + res); } this.onStatus = function(info){ trace("Failed with code:" + info.code); } }; application.onConnect = function(clientObj){ trace("Connected"); application.acceptConnection(clientObj); clientObj.call("getNumber", new randHandler()); }; FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 36 サーバーサイド ActionScript リファレンスガイド 注意:この例は、バージョン 2 のコンポーネントには適用できません。バージョン 2 のコンポーネントを使用して Client.call() を呼び出す例については、application.onConnectAccept() を参照してください。 Client.checkBandwidth() clientObject.checkBandwidth() クライアントの帯域幅を検出するには、クライアントサイドスクリプトからこのメソッドを呼び出します。クライアントが オリジンサーバーに直接接続している場合、帯域幅検出はオリジンサーバーで実行されます。クライアントがエッジサー バーを通じてオリジンサーバーに接続されている場合、帯域幅検出はクライアントが接続されている最初のエッジサーバー で実行されます。 このメソッドを使用してクライアントの帯域幅を検出するには、クライアントサイドスクリプトで onBWDone() および onBWCheck() メソッドを定義します。詳細については、 『Adobe Flash Media Server 開発者ガイド』を参照してください。 注意:サーバーサイドスクリプトで checkBandwidth() 関数を定義すると、クライアント呼び出しが、コアサーバーコード内 の定義ではなくユーザー定義を実行します。 使用できるバージョン Flash Media Interactive Server 3 および Flash Media Development Server 3 Client.getBandwidthLimit() clientObject.getBandwidthLimit(iDirection) クライアントまたはサーバーがこの接続で使用できる最大帯域幅を返します。各接続の方向を示す値を取得するには、 iDirection パラメータを使用します。戻り値は 1 秒あたりのバイト数を表します。この値は Client.setBandwidthLimit() メ ソッドを使用して変更することができます。各アプリケーションの Application.xml ファイルで、接続のデフォルト値を設 定します。 このメソッドは、クライアントサイドスクリプトから呼び出すことができます。NetConnection.call() メソッドを呼び出し、 次のようにしてメソッドの名前、結果オブジェクト、引数を渡します。 var re:Responder = new Responder(res); function res(info) { trace(info); for (var i:String in info) { trace(i + " - " + info[i]); } } nc.call("getBandwidthLimit", re, 0); 使用できるバージョン Flash Communication Server 1 パラメータ iDirection 接続の方向を指定する数値。0 はクライアントからサーバーへの接続を、1 はサーバーからクライアントへの接続 を表します。 戻り値 数値。 例 次の例では、Client.getBandwidthLimit() を使用して変数 clientToServer および serverToClient を設定しています。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 37 サーバーサイド ActionScript リファレンスガイド application.onConnect = function(newClient){ var clientToServer= newClient.getBandwidthLimit(0);var serverToClient= newClient.getBandwidthLimit(1); }; Client.getStats() clientObject.getStats() クライアントの統計を返します。 このメソッドは、クライアントサイドスクリプトから呼び出すことができます。NetConnection.call() メソッドを呼び出し、 次のようにしてメソッドの名前、結果オブジェクト、引数を渡します。 var re:Responder = new Responder(res); function res(info) { trace(info); for (var i:String in info) { trace(i + " - " + info[i]); } } nc.call("getStats", re); 使用できるバージョン Flash Communication Server 1 戻り値 戻ってきた統計ごとのプロパティを持つオブジェクト。次の表は、返されるオブジェクトのプロパティを示しています。 プロパティ 説明 bytes_in 受信した合計バイト数。 bytes_out 送信した合計バイト数。 msg_in 受信した RTMP メッセージの合計数。 msg_out 送信した RTMP メッセージの合計数。 msg_dropped 欠落した RTMP メッセージの合計数。 ping_rtt クライアントが ping メッセージに応答するまでの時間。 audio_queue_msgs クライアントへの配信を待機するキューに入れられた、現在のオーディオメッセージの数。 video_queue_msgs クライアントへの配信を待機するキューに入れられた、現在のビデオメッセージの数。 so_queue_msgs クライアントへの配信を待機するキューに入れられた、現在の共有オブジェクトメッセージの数。 data_queue_msgs クライアントへの配信を待機するキューに入れられた、現在のデータメッセージの数。 dropped_audio_msgs 欠落したオーディオメッセージの数。 dropped_video_msgs 欠落したビデオメッセージの数。 audio_queue_bytes クライアントへの配信を待機するキューに入れられた、すべてのオーディオメッセージの合計サイズ(バイト数)。 video_queue_bytes クライアントへの配信を待機するキューに入れられた、すべてのビデオメッセージの合計サイズ(バイト数)。 so_queue_bytes クライアントへの配信を待機するキューに入れられた、すべての共有オブジェクトメッセージの合計サイズ(バイ ト数)。 data_queue_bytes クライアントへの配信を待機するキューに入れられた、すべてのデータメッセージの合計サイズ(バイト数)。 dropped_audio_bytes 欠落したすべてのオーディオメッセージの合計サイズ(バイト数)。 dropped_video_bytes 欠落したすべてのビデオメッセージの合計サイズ(バイト数)。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 38 サーバーサイド ActionScript リファレンスガイド プロパティ 説明 bw_out このクライアントの現在のアップストリーム(クライアントからサーバー)帯域幅。 bw_in このクライアントの現在のダウンストリーム(サーバーからクライアント)帯域幅。 client_id サーバーからこのクライアントに対して発行される固有の ID。 例 次の例では、クライアントの統計が出力されます。 function testStats(){ var stats = client.getStats(); for(var prop in stats){ trace("stats." + prop + " = " + stats[prop]); } } application.onConnect = function(client){ this.acceptConnection(client); testStats(); }; Client.id clientObject.id 読み取り専用。クライアントを識別する文字列。 使用できるバージョン Flash Media Server 3 例 次の onConnect() 関数は、接続しているクライアントの ID をトレースします。 application.onConnect(newClient) { trace(newClient.id); } Client.jp clientObject.ip 読み取り専用。クライアントの IP アドレスを含む文字列。 使用できるバージョン Flash Communication Server 1 例 次の例では、Client.ip プロパティを使用して、新しいクライアントの IP アドレスが特定の IP アドレスと一致するかどうか を確認します。その結果によって、実行するコードブロックが決まります。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 39 サーバーサイド ActionScript リファレンスガイド application.onConnect = function(newClient, name){ if (newClient.ip == "127.0.0.1"){ // Insert code here. } else { // Insert code here. } }; Client.pageUrl clientObject.pageUrl 読み取り専用。クライアント SWF ファイルが埋め込まれている Web ページの URL を含む文字列。SWF ファイルが Web ページに埋め込まれていない場合、この値は SWF ファイルの場所になります。次のコードは 2 つの例を示しています。 // trace.swf file is embedded in trace.html. client.pageUrl: http://www.example.com/trace.html // trace.swf is not embedded in an html file. client.pageUrl: http://www.example.com/trace.swf 値をローカルファイルアドレスにすることはできません。 使用できるバージョン Flash Media Server 2 例 次の例では、Client.pageUrl プロパティを使用して、新しいクライアントが特定の URL にあるかどうかを検証しています。 その結果によって、実行するコードブロックが決まります。 application.onConnect = function(newClient){ if (newClient.pageUrl == "http://www.example.com/index.html"){ return true; } else { return false; } }; Client.ping() clientObject.ping() クライアントに “ping” メッセージを送信し、応答を待ちます。クライアントから応答があると、このメソッドは true を返 します。そうでない場合は false を返します。クライアントの接続がまだアクティブな状態であるかどうかを確認するには、 このメソッドを使用します。 使用できるバージョン Flash Communication Server 1 例 次の例の onConnect() 関数は、接続しているクライアントに ping メッセージを送り、メソッドの結果をトレースします。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 40 サーバーサイド ActionScript リファレンスガイド application.onConnect(newClient) { if (newClient.ping()){ trace("ping successful"); } else { trace("ping failed"); } } 関連項目 Client.getStats() Client.protocol clientObject.protocol 読み取り専用。クライアントがサーバーに接続するために使用するプロトコルを示す文字列。この文字列には、次のいずれ かの値が含まれています。 プロトコル 説明 rtmp 永続的なソケット接続上の RTMP。 rtmpt HTTP を介した RTMP のトンネリング。 rtmps SSL(Secure Socket Layer)接続を介した RTMP。 rtmpe 暗号化された RTMP 接続。 rtmpte HTTP を介してトンネリングされる暗号化された RTMP 接続。 使用できるバージョン Flash Communication Server 1 例 次の例では、アプリケーションへの接続でクライアントが使用する接続プロトコルを照合します。 application.onConnect(clientObj){ if(clientObj.protocol == "rtmp") { trace("Client connected over RTMP"); } else if(clientOjb.protocol == "rtmpt") { trace("Client connected over RTMP tunneled over HTTP"); } } Client.readAccess clientObject.readAccess クライアントに読み取りアクセス権が与えられているアプリケーションリソース(共有オブジェクトおよびストリーム)を 含むディレクトリの文字列。アプリケーションリソースを格納するディレクトリ(複数)に対する読み取りアクセス権をク ライアントに与えるには、対象のディレクトリをセミコロンで区切った文字列でリストします。 使用できるバージョン Flash Communication Server 1 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 41 サーバーサイド ActionScript リファレンスガイド 詳細 デフォルトでは、すべてのクライアントに完全読み取りアクセス権が与えられ、readAccess プロパティがスラッシュ (/) に設 定されます。クライアントに読み取りアクセス権を与えるには、セミコロンで区切ったアクセスレベルのリスト (URI 形式 ) を指定します。指定した URI だけでなく、その下にあるファイルやディレクトリもアクセス可能になります。例えば、アク セスレベルとして myMedia を指定した場合、myMedia ディレクトリだけでなく、このディレクトリの下にあるファイルや ディレクトリ(myMedia/mp3s など)へのアクセスが可能になります。同様に、myMedia/mp3s ディレクトリの下にあ る階層内のファイルやディレクトリにもアクセスできます。 ストリームを格納するディレクトリに対する読み取りアクセス権を持つクライアントは、指定されたアクセスレベルの下に あるストリームを再生できます。共有オブジェクトを格納するディレクトリに対する読み取りアクセス権を持つクライアン トは、指定されたアクセスレベルの下にある共有オブジェクトに接続し、それらの共有オブジェクトの変更時には、通知を 受信することができます。 • ストリームの場合、readAccess によって、各接続でどのストリームが再生可能であるかが制御されます。 • 共有オブジェクトの場合、readAccess によって、各接続で共有オブジェクトの変更を認識できるかどうかが制御されま す。 このプロパティを使用して、特定のファイルに対するアクセスを制御することはできませんが、ファイルに別のディレクト リを作成してアクセスを制御することは可能です。 注意:このプロパティは、application.onPublish() イベントで設定することはできません。 例 次の onConnect() 関数では、あるクライアントに対して、myMedia/mp3s、myData/notes およびその下のファイルや ディレクトリに対する読み取りアクセス権を設定します。 application.onConnect = function(newClient, name){ newClient.readAccess = "myMedia/mp3s;myData/notes"; }; Client.referrer clientObject.referrer 読み取り専用。接続の作成元の SWF ファイルまたはサーバーの URL を含む文字列。このプロパティは、Web サーバーに ホストされた SWF が Flash Media Server 上のアプリケーションに接続するときに設定されます。Flash Media Server が別 の Flash Media Server に接続するときもこのプロパティが設定されます。 このプロパティは、スタンドアロンの Flash Player バージョン 10 以上で実行される、ローカルファイルシステムの SWF が Flash Media Server に接続するときは、設定されません。SWF ファイルがスタンドアロンの Flash Player バージョン 8 または 9 で実行されている場合、このプロパティは file:///... と設定されます。 使用できるバージョン Flash Communication Server 1 例 application.onConnect = function(newClient, name){ trace("New user connected to server from" + newClient.referrer); }; Client.remoteMethod() myClient.remoteMethod = function([p1, ..., pN]){} FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 42 サーバーサイド ActionScript リファレンスガイド Client オブジェクトでメソッドを定義して、クライアントサイドコードからメソッドを呼び出すことができます。クライア ントサイドコードからメソッドを呼び出すには、NetConnection.call() メソッドを呼び出して、定義したメソッドの名前を渡 します。サーバーはメソッドの Client オブジェクトインスタンスを検索します。メソッドが見つかって呼び出されると、 NetConnection.call() に対する呼び出しで指定された結果オブジェクトに戻り値が返信されます。 使用できるバージョン Flash Communication Server 1 パラメータ p1, ..., pN NetConnection.call() メソッドに引き渡されるオプションパラメータ。 例 次の例では、サーバーサイドの Client オブジェクト newClient のプロパティとして、sum() というメソッドを作成します。 Client.prototype.sum = function(op1, op2){ return op1 + op2; }; NetConnection.call() メソッドに対するクライアントサイドの呼び出しから、サーバーサイドの sum() メソッドを呼び出すこ とができます。 nc = new NetConnection(); nc.connect("rtmp://myServer/myApp"); nc.call("sum", new result(), 20, 50); function result(){ this.onResult = function (retVal){ output += "sum is " + retVal; }; this.onStatus = function(errorVal){ output += errorVal.code + " error occurred"; }; } sum() メソッドはサーバーサイドコードで呼び出すこともできます。 newClient.sum(); 次の例では、クライアントサイドとサーバーサイドのどちらのスクリプトからも呼び出せる、2 つの関数が作成されます。 application.onConnect = function(clientObj) { // The function foo returns 8. clientObj.foo = function() {return 8;}; // The function bar is defined outside the onConnect call. clientObj.bar = application.barFunction; }; // The bar function adds the two values it is given. application.barFunction = function(v1,v2) { return (v1 + v2); }; 上記のコードで定義した 2 つの関数(foo と bar)は、いずれも、クライアントサイドスクリプトで次のコードを使用して呼 び出すことができます。 c = new NetConnection(); c.call("foo"); c.call("bar", null, 1, 1); 上記のコードで定義した 2 つの関数(foo と bar)は、いずれも、サーバーサイドスクリプトで次のコードを使用して呼び出 すことができます。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 43 サーバーサイド ActionScript リファレンスガイド c = new NetConnection(); c.onStatus = function(info) { if(info.code == "NetConnection.Connect.Success") { c.call("foo"); c.call("bar", null, 2, 2); } }; Client.__resolve() Client.__resolve = function(propName){} 定義されていないプロパティの値を返します。Client オブジェクトの未定義プロパティがサーバーサイドの ActionScript コードによって参照されると、その Client オブジェクトに _resolve() メソッドが存在するかどうかがチェックされます。オ ブジェクトに _resolve() メソッドがある場合は、メソッドが呼び出され、未定義のプロパティの名前が渡されます。 _resolve() メソッドの戻り値は、未定義プロパティの値です。このように、_resolve() では、未定義プロパティに値を提供し、 実際に定義されているように見せかけることができます。 使用できるバージョン Flash Communication Server 1 パラメータ propName 未定義プロパティの名前を示す文字列。 戻り値 propName パラメータで指定されたプロパティの値。 例 次の例では、未定義のプロパティが参照されるたびに呼び出される関数を定義します。 Client.prototype.__resolve = function (name) { return "Hello, world!"; }; function onConnect(newClient){ // Prints "Hello World". trace (newClient.property1); } Client.secure clientObject.secure 読み取り専用。SSL 接続であるか(true)そうでないか(false)を示すブール値。 使用できるバージョン Flash Media Server 2 Client.setBandwidthLimit() clientObject.setBandwidthLimit(iServerToClient, iClientToServer) このクライアントが使用できる、クライアントとサーバー間(どららか一方向または双方向)の接続の最大帯域幅を設定し ます。各アプリケーションの接続のデフォルト値は、Application.xml ファイルの Client セクションに設定されています。 この値に、Application.xml ファイルに指定された帯域幅の上限を超過する値を指定することはできません。詳細について は、『Adobe Flash Media Server 設定および管理ガイド』の BandwidthCap を参照してください。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 44 サーバーサイド ActionScript リファレンスガイド このメソッドは、クライアントサイドスクリプトから呼び出すことができます。NetConnection.call() メソッドを呼び出し、 次のようにしてメソッドの名前、結果オブジェクト、引数を渡します。 var re:Responder = new Responder(res); function res(info) { trace(info); for (var i:String in info) { trace(i + " - " + info[i]); } } nc.call("setBandwidthLimit", re, 125000, 125000); 使用できるバージョン Flash Communication Server 1 パラメータ iServerToClient サーバーからクライアントへの接続の帯域幅(バイト数 / 秒)を示す数字。現在の設定を変更する必要がな いときは、0 と指定します。 iClientToServer クライアントからサーバーへの接続の帯域幅(バイト数 / 秒)を示す数字。現在の設定を変更する必要がな いときは、0 と指定します。 例 次の例では、onConnect() 関数に渡された値に基づいて、各方向の帯域幅の制限を設定します。 application.onConnect = function(newClient, serverToClient, clientToServer){ newClient.setBandwidthLimit(serverToClient, clientToServer); application.acceptConnection(newClient); } Client.uri clientObject.uri 読み取り専用。このアプリケーションインスタンスに接続するためにクライアントによって指定された URI。 使用できるバージョン Flash Media Server 2 例 次の例では、新規クライアントがアプリケーションに接続するために使用した URI を示すメッセージを送信する onConnect() コールバック関数を定義します。 application.onConnect = function(newClient, name){ trace("New user requested to connect to " + newClient.uri); }; Client.videoSampleAccess clientObject.videoSampleAccess Flash Player が、指定したフォルダ内のストリームから生の非圧縮ビデオデータにアクセスできるようにします。 現在再生中のストリームの生のデータを読み取るには、クライアントサイドの ActionScript 3.0 で BitmapData.draw() メ ソッドを呼び出します。詳細については、 『ActionScript 3.0 コンポーネントリファレンスガイド』の BitmapData.draw() の 項目を参照してください。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 45 サーバーサイド ActionScript リファレンスガイド 使用できるバージョン Flash Media Interactive Server 3 および Flash Media Development Server 3 例 次のサーバーサイドコードでは、料金を支払うユーザーに対して、videoSampleAccess ディレクトリが publicdomain に設定 されます。 application.onConnect = function(client) { // Anyone can play free content, which is all streams placed under the // samples/, publicdomain/, and contrib/ folders. client.readAccess = "samples;publicdomain;contrib"; // Paying customers get to watch more streams. if ( isPayingCustomer(client)) client.readAccess += "nonfree;premium"; // Content can be saved (user recorded streams) to the contrib/ folder. client.writeAccess = "contrib"; // Anyone can gain access to an audio snapshot of the publicdomain/ folder. client.audioSampleAccess = "publicdomain"; // Paying customers can also get a video snapshot of the publicdomain/ folder. if (isPayingCustomer(client)) client.videoSampleAccess = "publicdomain"; } 関連項目 Client.audioSampleAccess Client.virtualKey clientObject.virtualKey このプロパティは、ストリームの URL をサーバー上の物理的な場所にマッピングするために、Stream.setVirtualPath() メ ソッドと共に使用します。それによって、異なるコンテンツを異なるバージョンの Flash Player に配信することができま す。 接続したクライアントは、Vhost.xml ファイルで設定した範囲に対応する仮想キーを受け取ります。サーバーサイドスクリ プトでこの値を変更するには、Client.virtualKey を使用します。次に、Vhost.xml ファイル内で設定する必要があるコード を示します。 A 上記の Vhost.xml ファイルでは、Flash Player 8 クライアントがサーバーに接続されている場合、Client.virtualKey の値は A になります。 注意:正規キーでは、“*” および “:” の文字を使用することはできません。 使用できるバージョン Flash Media Server 2 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 46 サーバーサイド ActionScript リファレンスガイド Client.writeAccess clientObject.writeAccess このクライアントに対して、アプリケーションリソース(共有オブジェクトやストリームなど)を格納するディレクトリへ の書き込みアクセス権を設定します。アプリケーションリソースを格納するディレクトリ(複数)に対する読み取りアクセ ス権をクライアントに与えるには、対象のディレクトリをセミコロンで区切った文字列でリストします。デフォルトでは、 すべてのクライアントに完全書き込みアクセス権が与えられ、writeAccess プロパティがスラッシュ(/)に設定されます。例 えば、アクセスレベルとして myMedia を指定した場合、myMedia ディレクトリだけでなく、このディレクトリの下にある ファイルやディレクトリ (myMedia/myStreams など ) へのアクセスが可能になります。同様に、myMedia/myStreams ディレクトリの下にある階層内のファイルやディレクトリにもアクセスできます。 • 共有オブジェクトの場合、writeAccess により、どのユーザーを作成および更新が可能なユーザーとするかが制御されま す。 • ストリームの場合、writeAccess により、どのユーザーをストリームのパブリッシュおよび記録が可能なユーザーとする かが制御されます。 このプロパティを使用して、1 つのファイルに対するアクセスを制御することはできません。1 つのファイルに対するアク セスを制御するには、そのファイル用に別のディレクトリを作成します。 クライアントサイドでは、ストリームのパスの先頭にスラッシュ(/)を置かないでください。 注意:このプロパティは、application.onPublish() イベントで設定することはできません。 使用できるバージョン Flash Communication Server 1 例 次の例では、/myMedia/myStreams ディレクトリおよび myData/notes ディレクトリへの書き込みアクセス権を与えま す。 application.onConnect = function(newClient, name){ newClient.writeAccess = "/myMedia/myStreams;myData/notes"; application.acceptConnection(); }; 次の例では、書き込みアクセス権を完全に無効にします。 application.onConnect = function(clientObj){ clientObj.writeAccess = ""; return true; }; 関連項目 Client.readAccess File クラス File クラスでは、アプリケーションによるサーバーのファイルシステムへの書き込みができます。これは、データベース サーバーを使用せずに情報を保存するとき、デバッグで使用するログファイルを作成するときおよび使用状況を追跡すると きに役立ちます。また、ディレクトリのリストは、Flash Remoting を使用することなくストリームまたは共有オブジェク トの内容リストを作成する際に便利です。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 47 サーバーサイド ActionScript リファレンスガイド デフォルト設定では、スクリプトがアクセスすることのできるファイルおよびディレクトリは、ホストするアプリケーショ ンのアプリケーションディレクトリ内部にあるものに限定されます。サーバー管理者は、File オブジェクトパスに対する仮 想ディレクトリマッピングを指定すると、追加ディレクトリへのアクセスをアプリケーションに許可することができます。 これは、次の例に示すように、Application.xml ファイルの FileObject タグで実行します。 /videos;C:\myvideos /fmsapps;C:\Program Files\fms\applications 上記の例では、デフォルトのアプリケーションディレクトリに加えて、2 つのディレクトリ割り当てを指定します。先頭が /videos であるパス(/videos/xyz/vacation.flv など)は、c:/myvideos/xyz/vaction.flv にマッピングされます。同様に、 /fmsapps/conference は c:/Program Files/fms/applications/conference にマッピングされます。マッピングに一致しない パスは、デフォルトのアプリケーションフォルダに解決されます。例えば、c:/myapps/filetest がアプリケーションディレ クトリである場合、/streams/hello.flv は c:/myapps/filetest/streams/hello.flv に割り当てられます。 注意:Application.xml ファイルは、仮想ホストレベルまたはアプリケーションレベルで使用することができます。 さらに、サーバーによって次の規則が実行されます。 • ネイティブなファイルパス仕様に従って File オブジェクトを作成することはできません。 • File オブジェクトのパスは、URI の規則に準拠する必要があります。 パスを区切るには、スラッシュ(/)を使用する必要があります。パスにバックスラッシュ(\)が含まれている場合、ま たはスラッシュ(/)で囲まれている文字列の要素がドット(.)または 2 つのドット(..)のみである場合には、アクセ ス拒否されます。 • ルートオブジェクトは、その名前を変更したり、削除したりすることはできません。 例えば、スラッシュ(/)を使用しているパスを使用して File オブジェクトが作成されると、アプリケーションフォルダ がマッピングされます。 使用できるバージョン Flash Media Server 2 プロパティ一覧 プロパティ 説明 File.canAppend 読み取り専用。ファイルを付加できるか(true)、できないか(false)を示すブール値。 File.canRead 読み取り専用。ファイルを読み取れるか(true)、そうでないか(false)を示すブール値。 File.canReplace 読み取り専用。ファイルが "create" モードで開かれたか(true)、そうでないか(false)を示すブール値。閉じられ たファイルでは、このプロパティは定義されません。 File.canWrite 読み取り専用。ファイルが書き込み可能であるか(true)、そうでないか(false)を示すブール値。 File.creationTime 読み取り専用。ファイルの作成日時が格納されている Date オブジェクト。 File.exists 読み取り専用。ファイルまたはディレクトリが存在するか(true)、存在しないか(false)を示すブール値。 File.isDirectory 読み取り専用。ファイルがディレクトリであるか(true)、そうでないか(false)を示すブール値。 File.isFile 読み取り専用。ファイルが通常のデータファイルなのか(true)、そうでないのか(false)を示すブール値。 File.isOpen 読み取り専用。ファイルが正常に開かれ、現在も開かれた状態なのか(true)、そうでないのか(false)を示すブー ル値。 File.lastModified 読み取り専用。ファイルが最後に変更された日時が格納されている Date オブジェクト。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 48 サーバーサイド ActionScript リファレンスガイド プロパティ 説明 File.length 読み取り専用。ディレクトリの場合は、カレントディレクトリおよび親ディレクトリのエントリを除いたディレクト リ内のファイルの数。ファイルの場合は、ファイル内のバイト数。 File.mode 読み取り専用。開かれたファイルのモード。 File.name 読み取り専用。ファイルの名前を示す文字列。 File.Position ファイルのカレントオフセット。 File.type 読み取り専用。ファイルを開く際に使用するデータまたはエンコーディングの種類を指定する文字列。 メソッド一覧 メソッド 説明 File.close() ファイルを閉じます。 File.copyTo() ファイルを別の場所にコピーします。または、別のファイル名で同じ場所にコピーします。 File.eof() ファイルポインタがファイルの末尾にあるか(true)、そうでないか(false)を示すブール値を返します。 File.flush() ファイルの出力バッファを消去します。 File.list() ファイルがディレクトリである場合は、ディレクトリにファイルがリストされます。 File.mkdir() ディレクトリが作成されます。 File.open() 読み取りまたは書き込みをするため、ファイルを開きます。 File.read() 指定の数のキャラクタをファイルから読み出し、文字列を返します。 File.readAll() ファイルポインタの場所の後のファイルを読み取り、ファイルの各行のエレメントを含む配列を返します。 File.readByte() ファイルから次のバイトを読み取り、次のバイトの数値を返します。操作に敗した場合は -1 を返します。 File.readln() ファイルから次の行を読み取って、文字列として返します。 File.remove() File オブジェクトでポイントされたファイルまたはディレクトリを削除します。 File.renameTo() ファイルを移動、またはファイル名を変更します。 File.seek() 指定の数のバイトをスキップし、ファイルの新しい位置を返します。 File.toString() File オブジェクトへのパスを返します。 File.write() ファイルに日付を書き込みます。 File.writeAll() 配列をパラメータとして取得し、配列内の各エレメントで File.writeln() メソッドを呼び出します。 File.writeByte() ファイルに 1 バイトを書き込みます。 File.writeln() 最終パラメータを出力した後、ファイルにデータを書き込み、プラットフォームに依存する行末のキャラクタを追加 します。 File コンストラクタ fileObject = new File(name) File クラスのインスタンスを作成します。 使用できるバージョン Flash Media Server 2 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 49 サーバーサイド ActionScript リファレンスガイド パラメータ name ファイルまたはディレクトリの名前を示す文字列。名前には、UTF-8 でエンコードされたキャラクタだけを使用でき ます。バイト値が高い場合は、URI 文字エンコーディングスキームによってエンコードします。指定した名前は、 Application.xml ファイルの FileObject セクションで指定されるマッピングを使用してシステムパスにマッピングされます。 パスが無効な場合、オブジェクトの name プロパティは空の文字列に設定され、ファイル操作は一切実行できません。 戻り値 正常に終了した場合は File オブジェクト。そうでない場合は null。 例 次のコードは、File クラスのインスタンスを作成します。 var errorLog = new File("/logs/error.txt"); ただし、File.open() を呼び出すまでは、ハードディスクに物理ファイルが作成されません。 File.canAppend fileObject.canAppend 読み取り専用。ファイルを付加できるか(true)、できないか(false)を示すブール値。閉じられたファイルでは、プロパ ティは定義されません。 使用できるバージョン Flash Media Server 2.0 File.canRead fileObject.canRead 読み取り専用。ファイルを読み取れるか(true)、そうでないか(false)を示すブール値。 使用できるバージョン Flash Media Server 2 File.canReplace fileObject.canReplace 読み取り専用。ファイルが "create" モードで開かれたか(true)、そうでないか(false)を示すブール値。閉じられたファイ ルでは、このプロパティは定義されません。 使用できるバージョン Flash Media Server 2 File.canWrite fileObject.canWrite 読み取り専用。ファイルが書き込み可能であるか(true)、そうでないか(false)を示すブール値。 注意:ファイルを開くために File.open() が呼び出された場合、ファイルを開いた際のモードが優先されます。例えば、ファ イルが読み取りモードで開かれた場合、ファイルからの読み取りは可能ですが、ファイルへの書き込みはできません。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 50 サーバーサイド ActionScript リファレンスガイド 使用できるバージョン Flash Media Server 2 File.close() fileObject.close() ファイルを閉じます。このメソッドは、オブジェクトが範囲外にある場合に、開いている File オブジェクトで自動的に呼び 出されます。 使用できるバージョン Flash Media Server 2 戻り値 ファイルが正常に閉じられたか(true)、そうでないか(false)を示すブール値。ファイルが開いていない場合は、false を返 します。 例 次のコードは /path/file.txt ファイルを閉じます。 if (x.open("/path/file.txt", "read") ){ // Do something here. x.close(); } File.copyTo() fileObject.copyTo(name) ファイルを別の場所にコピーします。または、別のファイル名で同じ場所にコピーします。このメソッドは、ソースファイ ルが存在しない場合、またはソースファイルがディレクトリである場合に、false を返します。このメソッドが失敗すると、 application.onStatus() イベントハンドラが呼び出され、エラーがレポートされます。 注意:オペレーティングシステムでサーバーを実行するユーザーまたはプロセスの所有者は、適切な書き込み権限を持って いる必要があります。権限がない場合は呼び出しが失敗します。 使用できるバージョン Flash Media Server 2 パラメータ name 宛先ファイルの名前を指定します。名前には、UTF-8 でエンコードされたキャラクタだけを使用できます。バイト値 が高い場合は、URI 文字エンコーディングスキームによってエンコードできます。指定した名前は、Application.xml ファ イルで指定されるマッピングを使用してシステムパスにマッピングされます。パスが無効である場合、または宛先ファイル が存在しない場合には、操作が失敗して、このメソッドは false を返します。 戻り値 ファイルが正常にコピーされたか(true)、そうでないか(false)を示すブール値。 例 次のコードは、myFileObj ファイルオブジェクトで設定されたファイルをパラメータが指定する場所にコピーします。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 51 サーバーサイド ActionScript リファレンスガイド if (myFileObj.copyTo( "/logs/backup/hello.log")){ // Do something here. } File.creationTime fileObject.creationTime 読み取り専用。ファイルの作成日時が格納されている Date オブジェクト。 使用できるバージョン Flash Media Server 2 File.eof() fileObject.eof() ファイルポインタがファイルの末尾にあるか(true)、そうでないか(false)を示すブール値を返します。ファイルが閉じら れると、このメソッドは true を返します。 使用できるバージョン Flash Media Server 2 戻り値 ブール値。 例 次の while ステートメントでは、ファイルポインタがファイル末尾に達するまで実行するコードを挿入することができます。 while (!myFileObj.eof()){ // Do something here. } File.exists fileObject.exists 読み取り専用。ファイルまたはディレクトリが存在するか(true)、存在しないか(false)を示すブール値。 使用できるバージョン Flash Media Server 2 File.flush() fileObject.flush() ファイルの出力バッファを消去します。ファイルが閉じられていると、操作が失敗します。このメソッドが失敗すると、 application.onStatus() イベントハンドラが呼び出され、エラーがレポートされます。 使用できるバージョン Flash Media Server 2 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 52 サーバーサイド ActionScript リファレンスガイド 戻り値 消去操作が正常に終了したか(true)、そうでないか(false)を示すブール値。 File.isDirectory fileObject.isDirectory 読み取り専用。ファイルがディレクトリであるか(true)、そうでないか(false)を示すブール値。 ディレクトリを表す File オブジェクトには、そのディレクトリ内のファイルを表すプロパティが含まれます。次の例に示す ように、これらのプロパティには、ディレクトリ内のファイルと同じ名前が付けられています。 myDir = new File("/some/directory"); myFileInDir = myDir.fileName; trace(myDir.isDirectory) // Outputs true. 次の例では、名前付きプロパティ参照を使用して、有効なプロパティ名を持たないファイルを参照します。 mySameFileInDir = myDir["fileName"]; myOtherFile = myDir["some long filename with spaces"]; 使用できるバージョン Flash Media Server 2 File.isFile fileObject.isFile 読み取り専用。ファイルが通常のデータファイルなのか(true)、そうでないのか(false)を示すブール値。 使用できるバージョン Flash Media Server 2 File.isOpen fileObject.isOpen 読み取り専用。ファイルが正常に開かれ、現在も開かれた状態なのか(true)、そうでないのか(false)を示すブール値。 注意:ディレクトリを開く必要はありません。 使用できるバージョン Flash Media Server 2 File.lastModified fileObject.lastModified 読み取り専用。ファイルが最後に変更された日時が格納されている Date オブジェクト。 使用できるバージョン Flash Media Server 2 File.length fileObject.length FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 53 サーバーサイド ActionScript リファレンスガイド 読み取り専用。ディレクトリの場合は、カレントディレクトリおよび親ディレクトリのエントリを除いたディレクトリ内の ファイルの数。ファイルの場合は、ファイル内のバイト数。 使用できるバージョン Flash Media Server 2 File.list() fileObject.list(filter) ファイルがディレクトリである場合は、ディレクトリにファイルがリストされます。ディレクトリ内の各ファイルのエレメ ントを含んだ配列を返します。 使用できるバージョン Flash Media Server 2 パラメータ filter 返される配列に含むファイルを決定する Function オブジェクト。 ファイル名がパラメータとして関数に渡されたときにその関数が true を返した場合、File.list() から返される配列にファイル が追加されます。このパラメータはオプションです。このパラメータでは、呼び出しの結果をフィルタ処理できます。 戻り値 Array オブジェクト。 例 次の例では、3 キャラクタの名前を持つカレントディレクトリ内のファイルを返します。 var a = x.currentDir.list(function(name){return name.length==3;}); File.mkdir() fileObject.mkdir(newDir) ディレクトリが作成されます。このディレクトリは、fileObject で指定されたディレクトリに作成されます。このメソッドが 失敗すると、application.onStatus() イベントハンドラが呼び出され、エラーがレポートされます。 オペレーティングシステムでサーバーを実行するユーザーまたはプロセスの所有者は、適切な書き込み権限を持っている必 要があります。権限がない場合は呼び出しが失敗します。 注意:このメソッドは、ファイルである(isFile が true である)ファイルオブジェクトから呼び出すことはできません。この メソッドは、ディレクトリである(isDirectory が true である)ファイルオブジェクトから呼び出す必要があります。 使用できるバージョン Flash Media Server 2 パラメータ newDir 新しいディレクトリの名前を示す文字列。この名前は File オブジェクトのカレントインスタンスに関連しています。 戻り値 成功(true)または失敗(false)を示すブール値。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 54 サーバーサイド ActionScript リファレンスガイド 例 次の例では、myFileObject インスタンスにログのディレクトリを作成します。 if (myFileObject.mkdir("logs")){ // Do something if a logs directory is created successfully. } File.mode fileObject.mode 読み取り専用。開かれたファイルのモード。繰り返す属性("read, read" など)がある場合、あるいは無視された属性がある 場合、open() メソッドに渡された mode パラメータとは異なることがあります。ファイルが閉じられると、このプロパティ は undefined になります。 使用できるバージョン Flash Media Server 2 関連項目 File.open() File.name fileObject.name 読み取り専用。ファイルの名前を示す文字列。無効なパスで File オブジェクトが作成された場合、値は空の文字列になりま す。 使用できるバージョン Flash Media Server 2 File.open() fileObject.open(type, mode) 読み取りまたは書き込みをするため、ファイルを開きます。最初に File コンストラクタ を使用して File オブジェクトを作 成し、そのオブジェクトで open() を呼び出します。open() メソッドが失敗すると、application.onStatus() イベントハンド ラが呼び出され、エラーがレポートされます。 使用できるバージョン Flash Media Server 2 パラメータ type ファイルのエンコーディングの種類を示す文字列。サポートされる種類は次のとおりです(デフォルト値はありませ ん)。 値 説明 "text" デフォルトのファイルエンコーディングを使用して、テキストアクセスのためにファイルを開きます。 "binary" バイナリアクセスのためにファイルを開きます。 "utf8" UTF-8 でアクセスするためにファイルを開きます。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 55 サーバーサイド ActionScript リファレンスガイド mode ファイルを開くときのモードを示す文字列。以下は有効なモードです。モードは結合することができます(大文字と 小文字が区別され、モードとモードはカンマで区切る必要があります。例えば、"read,write" のようにします。デフォルト値 はありません)。 値 説明 "read" 読み取りのためにファイルを開きます。 "write" 書き込みのためにファイルを開きます。 "readWrite" 読み取りと書き込みのためにファイルを開きます。 "append" ファイルへの書き込みを試行すると、書き込みのためにファイルを開き、ファイルの末尾にファイルポインタを置きます。 "create" ファイルがない場合に新しいファイルを作成します。ファイルが存在する場合は、内容が破壊され、新しいファイルが作 成されます。 注意:"read" と "write" の両方が設定されると、自動的に "readWrite" が設定されます。オペレーティングシステムでサーバー を実行するユーザーまたはプロセスの所有者は、"create"、"append"、"readWrite" および "write" モードを使用するには、 書き込み権限を持っている必要があります。 戻り値 ファイルが正常に開かれたかファイルが正常に開かれたか(true)、そうでないか(false)を示すブール値。 例 次のクライアントサイドスクリプトでは、アプリケーションで呼び出されたファイルに対する接続が作成されます。 var nc:NetConnection = new NetConnection(); function traceStatus(info) { trace("Level: " + info.level + " Code: " + info.code); } nc.onStatus = traceStatus; nc.connect("rtmp:/file"); 次のサーバーサイドスクリプトでは log.txt というテキストファイルが作成され、ファイルにテキストが書き込まれます。 application.onConnect = function(client){ this.acceptConnection(client); var logFile = new File("log.txt"); if(!logFile.exists){ logFile.open("text", "append"); logFile.write("something", "somethingElse") } }; File.Position fileObject.position ファイルのカレントオフセット。File クラスで設定可能なプロパティはこれだけです。このプロパティを設定すると、ファ イルでシーク操作を実行できます。閉じられたファイルでは、プロパティは定義されません。 使用できるバージョン Flash Media Server 2 File.read() fileObject.read(numChars) FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 56 サーバーサイド ActionScript リファレンスガイド 指定の数のキャラクタをファイルから読み出し、文字列を返します。ファイルがバイナリモードで開いていると、操作は失 敗します。このメソッドが失敗すると、application.onStatus() イベントハンドラが呼び出され、エラーがレポートされます。 使用できるバージョン Flash Media Server 2 パラメータ numChars 読み取るキャラクタの数を指定する数値。numChars が指定するバイト数が、ファイルに残っている数よりも多 い場合、このメソッドはファイルの最後まで読み取ります。 戻り値 文字列。 例 次のコードは、読み取りモードでテキストファイルを開き、先頭の 100 のキャラクタ、行、バイトに変数を設定します。 if (myFileObject.open("text", "read")){ strVal = myFileObject.read(100); strLine = myFileObject.readln(); strChar = myFileObject.readByte(); } File.readAll() fileObject.readAll() ファイルポインタの場所の後のファイルを読み取り、ファイルの各行のエレメントを含む Array オブジェクトを返します。 ファイルがバイナリモードで開いていると、操作は失敗します。このメソッドが失敗すると、application.onStatus() イベント ハンドラが呼び出され、エラーがレポートされます。 使用できるバージョン Flash Media Server 2 戻り値 Array オブジェクト。 File.readByte() fileObject.readByte() ファイルから次のバイトを読み取り、次のバイトの数値を返します。操作に敗した場合は -1 を返します。ファイルがバイナ リモードで開いていると、操作は失敗します。 使用できるバージョン Flash Media Server 2 戻り値 数字(正の整数または -1)。 File.readln() fileObject.readln() FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 57 サーバーサイド ActionScript リファレンスガイド ファイルから次の行を読み取って、文字列として返します。行区切り文字 (Windows では \r\n、Linux では \n) は、文字列 に含まれません。\r というキャラクタはスキップされます。\n は実際の行末を決定します。ファイルがバイナリモードで開 いていると、操作は失敗します。 使用できるバージョン Flash Media Server 2 戻り値 文字列。 File.remove() fileObject.remove(recursive) File オブジェクトでポイントされたファイルまたはディレクトリを削除します。このメソッドが失敗すると、 application.onStatus() イベントハンドラが呼び出され、エラーがレポートされます。 使用できるバージョン Flash Media Server 2 パラメータ recursive ディレクトリとすべての内容を再帰的に削除するか(true)、ディレクトリの内容を非再帰的に削除するか(false) を指定するブール値。値が指定されない場合のデフォルト値は false です。fileObject がディレクトリではない場合、remove() メソッドに渡されるパラメータはすべて無視されます。 戻り値 ファイルまたはディレクトリの削除が正常に終了したか(true)、そうでないか(false)を示すブール値。ファイルが開いて いる場合、パスがルートフォルダをポイントしている場合、またはディレクトリが空ではない場合に、false を返します。 例 次の例は、ファイルの作成と削除を示しています。 fileObject = new File("sharedobjects/_definst_/userIDs.fso"); fileObject.remove(); File.renameTo() fileObject.renameTo(name) ファイルを移動、またはファイル名を変更します。ファイルが開いている場合、またはディレクトリがルートディレクトリ をポイントしている場合、操作は失敗します。このメソッドが失敗すると、application.onStatus() イベントハンドラが呼び出 され、エラーがレポートされます。 使用できるバージョン Flash Media Server 2 パラメータ name ファイルまたはディレクトリの新しい名前。名前には、UTF-8 でエンコードされたキャラクタだけを使用できます。 バイト値が高い場合は、URI 文字エンコーディングスキームによってエンコードします。指定した名前は、 Application.xml ファイルで指定されるマッピングを使用してシステムパスにマッピングされます。パスが無効である場合 または宛先ファイルが存在しない場合、操作は失敗します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 58 サーバーサイド ActionScript リファレンスガイド 戻り値 ファイル名の変更またはファイルの移動が正常に終了したか(true)、そうでないか(false)を示すブール値。 File.seek() fileObject.seek(numBytes) 指定の数のバイトをスキップし、ファイルの新しい位置を返します。このメソッドには、正負どちらのパラメータも指定で きます。 使用できるバージョン Flash Media Server 2 パラメータ numBytes ファイルポインタを現在の位置から移動させるバイト数を示す数値。 戻り値 操作が成功すると、ファイル内の現在の位置が返されます。操作が失敗すると、-1 が返されます。ファイルが閉じていると 操作が失敗し、application.onStatus() が呼び出され、警告がレポートされます。この操作は、ディレクトリ上で呼び出された 場合は -1 が返されます。 File.toString() fileObject.toString() File オブジェクトへのパスを返します。 使用できるバージョン Flash Media Server 2 戻り値 文字列。 例 次の例では、File オブジェクト myFileObject へのパスを出力します。 trace(myFileObject.toString()); File.type fileObject.type 読み取り専用。ファイルを開く際に使用するデータまたはエンコーディングの種類を指定する文字列。サポートされている 文字列は、"text"、"utf8" および "binary" です。ディレクトリおよび閉じられたファイルでは、このプロパティは定義されませ ん。"text" モードでファイルが開かれ、UTF-8 BOM(Byte Order Mark)が検出されると、type プロパティは "utf8" に設定 されます。 使用できるバージョン Flash Media Server 2.0 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 59 サーバーサイド ActionScript リファレンスガイド 関連項目 File.open() File.write() fileObject.write(param0, param1,...paramN) ファイルに日付を書き込みます。write() メソッドは、各パラメータを文字列に変換し、次にその文字列を区切り文字なしで ファイルに書き込みます。ファイルの内容は内部的にバッファされます。File.flush() メソッドは、ディスク上のファイルに バッファを書き込みます。このメソッドが失敗すると、application.onStatus() イベントハンドラが呼び出され、エラーがレ ポートされます。 注意:オペレーティングシステムでサーバーを実行するユーザーまたはプロセスの所有者は、書き込み権限を持っている必 要があります。権限がない場合は呼び出しが失敗します。 使用できるバージョン Flash Media Server 2 パラメータ param0, param1,...paramN ファイルに書き込むパラメータ。 戻り値 書き込み操作が正常に終了したか(true)、そうでないか(false)を示すブール値。 例 次の例では、myFileObject テキストファイルの末尾に "Hello world" を書き込みます。 if (myFileObject.open( "text", "append") ) { myFileObject.write("Hello world"); } File.writeAll() fileObject.writeAll(array) Array オブジェクトをパラメータとして取得し、配列内の各エレメントで File.writeln() メソッドを呼び出します。ファイル の内容は内部的にバッファされます。File.flush() メソッドは、ディスク上のファイルにバッファを書き込みます。 注意:オペレーティングシステムでサーバーを実行するユーザーまたはプロセスの所有者は、書き込み権限を持っている必 要があります。権限がない場合は呼び出しが失敗します。 使用できるバージョン Flash Media Server 2 パラメータ array ファイルに書き込むすべてのエレメントを含む配列オブジェクト。 戻り値 書き込み操作が正常に終了したか(true)、そうでないか(false)を示すブール値。 File.writeByte() fileObject.writeByte(number) FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 60 サーバーサイド ActionScript リファレンスガイド ファイルに 1 バイトを書き込みます。ファイルの内容は内部的にバッファされます。File.flush() メソッドは、ディスク上の ファイルにバッファを書き込みます。 注意:オペレーティングシステムでサーバーを実行するユーザーまたはプロセスの所有者は、書き込み権限を持っている必 要があります。権限がない場合は呼び出しが失敗します。 使用できるバージョン Flash Media Server 2 パラメータ number 書き込む数値。 戻り値 書き込み操作が正常に終了したか(true)、そうでないか(false)を示すブール値。 例 次の例では、myFileObject ファイルの最後にバイト 65 を書き込みます。 if (myFileObject.open("text","append")) { myFileObject.writeByte(65); } File.writeln() fileObject.writeln(param0, param1,...paramN) 最終パラメータを出力した後、ファイルにデータを書き込み、プラットフォームに依存する行末のキャラクタを追加します。 ファイルの内容は内部的にバッファされます。File.flush() メソッドは、ディスク上のファイルにバッファを書き込みます。 注意:オペレーティングシステムでサーバーを実行するユーザーまたはプロセスの所有者は、書き込み権限を持っている必 要があります。権限がない場合は呼び出しが失敗します。 使用できるバージョン Flash Media Server 2 パラメータ param0, param1,...paramN ファイルに書き込む文字列。 戻り値 書き込み操作が正常に終了したか(true)、そうでないか(false)を示すブール値。 例 次の例では、書き込みのためにテキストファイルを開き、1 行書き込みます。 if (fileObj.open( "text", "append") ) { fileObj.writeln("This is a line!"); } FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 61 サーバーサイド ActionScript リファレンスガイド LoadVars クラス LoadVars クラスでは、オブジェクト内のすべての変数を指定の URL に送ったり、指定された URL にあるすべての変数を オブジェクトにロードしたりできます。また、すべての変数ではなく特定の変数を送信することもできるので、アプリケー ションの効率が向上します。LoadVars.onLoad() ハンドラを使用すると、(データがロードされる前ではなく)データがロー ドされるときにアプリケーションが実行されるようにすることができます。 LoadVars クラスの動作は XML クラスとよく似ています。このクラスは、load()、send() および sendAndLoad() メソッド を使用してサーバーと通信します。LoadVars クラスと XML クラスの大きな違いは、LoadVars クラスが ActionScript の 名前と値のペアを転送するのに対して、XML クラスは XML オブジェクトに格納されている XML DOM(ドキュメントオ ブジェクトモデル:Document Object Model)ツリーを転送するということです。LoadVars クラスは、XML クラスと同 じセキュリティ規定に従います。 使用できるバージョン Flash Media Server 2 プロパティ一覧 プロパティ LoadVars.contentType 説明 LoadVars.send() メソッドまたは LoadVars.sendAndLoad() メソッドを呼び出したときにサーバーに送られる MIME タイプ。 LoadVars.loaded LoadVars.load() または LoadVars.sendAndLoad() の操作が完了したか(true)、していないか(false)を示す ブール値。 メソッド一覧 メソッド LoadVars.addRequestHeader() 説明 POST アクションによって送信される HTTP 要求ヘッダー(Content-Type や SOAPAction など)を追 加または変更します。 LoadVars.decode() LoadVars.getBytesLoaded() クエリー文字列を、指定された LoadVars オブジェクトのプロパティに変換します。 最終のまたは現在の LoadVars.send() または LoadVars.sendAndLoad() メソッド呼び出しからロードされ たバイト数を返します。 LoadVars.getBytesTotal() すべての LoadVars.send() または LoadVars.sendAndLoad() メソッドの呼び出し中にロードされた合計バ イト数を返します。 LoadVars.load() 指定された URL から変数をダウンロードし、変数データを解析し、結果として得られた変数を、メソッ ドを呼び出す LoadVars オブジェクトに代入します。 LoadVars.send() 指定されたオブジェクト内の変数を、指定された URL に送信します。 LoadVars.sendAndLoad() 指定されたオブジェクト内の変数を、指定された URL に送信します。 LoadVars.toString() 指定したオブジェクト内の列挙可能な変数をすべて含む文字列を、MIME コンテンツエンコード application/x-www-urlform-encoded で返します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 62 サーバーサイド ActionScript リファレンスガイド イベントハンドラ一覧 イベントハンドラ 説明 LoadVars.onData() サーバーからのデータのダウンロードが完了したとき、またはサーバーからデータをダウンロード中にエ ラーが発生したときに呼び出されます。 LoadVars.onHTTPStatus() Flash Media Interactive Server がサーバーから HTTP ステータスコードを受け取ると呼び出されます。 LoadVars.onLoad() LoadVars.send() または LoadVars.sendAndLoad() の操作が完了したときに呼び出されます。 LoadVars コンストラクタ new LoadVars() LoadVars オブジェクトを作成します。その LoadVars オブジェクトのメソッドを使用してデータを送信およびロードでき ます。 使用できるバージョン Flash Media Server 2 例 次の例では、my_lv という LoadVars オブジェクトを作成します。 var my_lv = new LoadVars(); LoadVars.addRequestHeader() myLoadVars.addRequestHeader(header, headerValue) POST アクションによって送信される HTTP 要求ヘッダー(Content-Type や SOAPAction など)を追加または変更しま す。このメソッドは次の 2 つの方法で使用できます。2 つの文字列 header と headerValue を渡すか、またはヘッダー名と ヘッダー値を入れ替えて、文字列の配列を渡すことができます。 同じヘッダー名に対して複数の呼び出しを実行すると、呼び出しのたびに前の呼び出しで設定された値が上書きされます。 このメソッドを使用して、次に示す標準の HTTP ヘッダーを追加または変更することはできません。Accept-Ranges、 Age、Allow、Allowed、Connection、Content-Length、Content-Location、Content-Range、ETag、Host、LastModified、Locations、Max-Forwards、Proxy-Authenticate、Proxy-Authorization、Public、Range、Retry-After、 Server、TE、Trailer、Transfer-Encoding、Upgrade、URI、Vary、Via、Warning および WWW-Authenticate。 使用できるバージョン Flash Media Server 2 パラメータ header HTTP リクエストヘッダー名を表す文字列、または文字列の配列。 headerValue header に関連付けられた値を表す文字列。 例 次の例では、値が Foo である SOAPAction というカスタム HTTP ヘッダーを my_lv オブジェクトに追加します。 var my_lv = new LoadVars(); my_lv.addRequestHeader("SOAPAction", "'Foo'"); 次の例では、headers という配列を作成します。この配列には、HTTP ヘッダーとその値が交互に格納されます。この配列 を addRequestHeader() メソッドにパラメータとして渡します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 63 サーバーサイド ActionScript リファレンスガイド var my_lv = new LoadVars(); var headers = ["Content-Type", "text/plain", "X-ClientAppVersion", "2.0"]; my_lv.addRequestHeader(headers); 次の例では、FLASH-UUID という要求ヘッダーを追加する新しい LoadVars オブジェクトを作成します。ヘッダーには変 数が格納され、サーバー側でチェックできます。 var my_lv = new LoadVars(); my_lv.addRequestHeader("FLASH-UUID", "41472"); my_lv.name = "Mort"; my_lv.age = 26; my_lv.send("http://flash-mx.com/mm/cgivars.cfm", "_blank", "POST"); LoadVars.contentType myLoadVars.contentType LoadVars.send() メソッドまたは LoadVars.sendAndLoad() メソッドを呼び出したときにサーバーに送られる MIME タイプ。 デフォルトは application/x-www-urlform-encoded です。 使用できるバージョン Flash Media Server 2 例 次の例では、LoadVars オブジェクトを作成し、サーバーに送信されるデータのデフォルトのコンテンツタイプを表示しま す。 application.onConnect = function(client){ this.acceptConnection(client); var my_lv = new LoadVars(); trace(my_lv.contentType); }; // Output to Live Log: application/x-www-form-urlencoded LoadVars.decode() myLoadVars.decode(queryString) クエリー文字列を、指定された LoadVars オブジェクトのプロパティに変換します。このメソッドは、LoadVars.onData() イ ベントハンドラによって内部的に使用されます。ほとんどの場合、ユーザーが直接このメソッドを呼び出す必要はありませ ん。LoadVars.onData() イベントハンドラを上書きした場合は、LoadVars.decode() を明示的に呼び出して変数の文字列を解析 できます。 使用できるバージョン Flash Media Server 2 パラメータ queryString 名前と値のペアを含む、URL エンコードされたクエリー文字列です。 例 次の例では、3 つの変数をトレースしています。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 64 サーバーサイド ActionScript リファレンスガイド application.onConnect = function(client){ this.acceptConnection(client); // Create a new LoadVars object. var my_lv = new LoadVars(); //Convert the variable string to properties. my_lv.decode("name=Mort&score=250000"); trace(my_lv.toString()); // Iterate over properties in my_lv. for (var prop in my_lv) { trace(prop+" -> "+my_lv[prop]); } }; Administration Console の Live Log パネルの出力を以下に示します。 name=Mort&score=250000 name -> Mort score -> 250000 contentType -> application/x-www-form-urlencoded loaded -> false LoadVars.getBytesLoaded() myLoadVars.getByesLoaded() 最終のまたは現在の LoadVars.load() または LoadVars.sendAndLoad() メソッド呼び出しからロードされたバイト数を返しま す。contentType プロパティの値は、getBytesLoaded() の値に影響を与えません。 使用できるバージョン Flash Media Server 2 戻り値 数値。 関連項目 LoadVars.getBytesTotal() LoadVars.getBytesTotal() myLoadVars.getBytesTotal() LoadVars.load()、LoadVars.sendAndLoad() LoadVars.load() または LoadVars.sendAndLoad() メソッドの呼び出し中にオブジェ クトにロードされた合計バイト数を返します。load() または sendAndLoad() への呼び出しが発行されるたびに、 getBytesLoaded() メソッドはリセットしますが、getBytesTotal() メソッドは増加し続けます。 contentType プロパティの値は、getBytesLoaded() の値に影響を与えません。 使用できるバージョン Flash Media Server 2 戻り値 数値。ロード処理が実行中ではない場合、またはまだ始まっていない場合、undefined を返します。ダウンロードを開始した が、サーバーが HTTP のコンテンツ長を送信しなかった場合など、合計バイト数を判別できない場合は、undefined が返さ れます。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 65 サーバーサイド ActionScript リファレンスガイド 関連項目 LoadVars.getBytesLoaded() LoadVars.load() myLoadVars.load(url) 指定された URL から変数をダウンロードし、変数データを解析し、結果として得られた変数を、メソッドを呼び出す LoadVars オブジェクトに代入します。リモートの URL から、またはローカルのファイルシステムの URL から変数をロー ドできます。どちらの場合も同じエンコーディング標準が適用されます。 myLoadVars オブジェクトのプロパティのうち、ダウンロードされた変数と名前が同じものは上書きされます。ダウンロー ドされたデータは、MIME コンテンツタイプ application/x-www-urlform-encoded である必要があります。 LoadVars.load() メソッドの呼び出しは非同期です。 使用できるバージョン Flash Media Server 2 パラメータ url 変数のダウンロード元の URL を示す文字列。 戻り値 成功(true)または失敗(false)を示すブール値。 例 次のコードは、データが返されたときに信号を送信する onLoad() ハンドラ関数を定義します。 application.onConnect = function(client){ this.acceptConnection(client); var my_lv = new LoadVars(); my_lv.onLoad = function(success) { if (success) { trace(this.toString()); } else { trace("Error loading/parsing LoadVars."); } }; my_lv.load("http://www.helpexamples.com/flash/params.txt"); }; LoadVars.loaded myLoadVars.loaded LoadVars.load() または LoadVars.sendAndLoad() の操作が完了したか(true)、していないか(false)を示すブール値。 使用できるバージョン Flash Media Server 2 例 次の例では、テキストファイルをロードし、操作が完了したときに情報をログファイルに書き込みます。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 66 サーバーサイド ActionScript リファレンスガイド var my_lv = new LoadVars(); my_lv.onLoad = function(success) { trace("LoadVars loaded successfully: "+this.loaded); }; my_lv.load("http://www.helpexamples.com/flash/params.txt"); 関連項目 LoadVars.onLoad() LoadVars.onData() myLoadVars.onData(src){} サーバーからのデータのダウンロードが完了したとき、またはサーバーからデータをダウンロード中にエラーが発生したと きに呼び出されます。 使用できるバージョン Flash Media Server 2 パラメータ src 文字列または undefined。LoadVars.load() メソッドまたは LoadVars.sendAndLoad() メソッドの呼び出しから返される生 の ( 未解析の ) データ。 詳細 このハンドラはデータが解析される前に呼び出されるので、Flash Player に組み込まれている解析ルーチンではなく、独自 の解析ルーチンを呼び出す場合に利用できます。LoadVars.onData() に割り当てられた関数に渡される src パラメータの値は 未定義であるか、またはサーバーからダウンロードされた URL エンコード形式の名前と値のペアを含む文字列です。src パ ラメータが未定義である場合は、サーバーからのデータのダウンロード時にエラーが発生します。 LoadVars.onData() のデフォルトの実装では、LoadVars.onLoad() を呼び出します。LoadVars.onData にカスタム関数を割り当 ててデフォルトの実装を上書きすることはできますが、独自に実装した LoadVars.onData() の中で呼び出さない限り、 LoadVars.onLoad() は呼び出されません。 例 次の例では、テキストファイルをロードし、操作が完了したときに内容をトレースします。 var my_lv = new LoadVars(); my_lv.onData = function(src) { if (src == undefined) { trace("Error loading content."); return; } trace(src); }; my_lv.load("content.txt", my_lv, "GET"); LoadVars.onHTTPStatus() myLoadVars.onHTTPStatus(httpStatus){} Flash Media Interactive Server がサーバーから HTTP ステータスコードを受け取ると呼び出されます。このハンドラを使 用すると、HTTP ステータスコードをキャプチャして、処理することができます。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 67 サーバーサイド ActionScript リファレンスガイド 使用できるバージョン Flash Media Server 2 パラメータ httpStatus サーバーによって返される HTTP ステータスコードを示す数字。例えば、値 404 は、要求された URI と一致す る URI が見つからなかったことを示します。HTTP ステータスコードは、HTTP specification の 10.4 および 10.5 節に記 載されています。(詳細については、www.w3.org にある W3 Web サイトを参照してください)。 詳細 onHTTPStatus() ハンドラは onData() の前に呼び出されます。ロード処理に失敗した場合には、値 undefined を使用して onLoad() の呼び出しをトリガします。onHTTPStatus() を上書きするかどうかは関係なく、onHTTPStatus() がトリガされた 後は必ず onData() がトリガされます。最も有効的に onHTTPStatus() ハンドラを使用するには、onHTTPStatus() 呼び出しの 結果を取得する関数を記述することをお勧めします。そうすることにより、その結果を onData() ハンドラおよび onLoad() ハンドラで使用できます。onHTTPStatus() が呼び出されないときは、Flash Media Interactive Server が URL 要求を試行 しなかったことを示します。 Flash Media Interactive Server がステータスコードを取得できない場合、またはサーバーと通信できない場合は、デフォ ルト値 0 が ActionScript コードに渡されます。 例 次の例は、デバッグにおける onHTTPStatus() の使用法を示しています。この例では、HTTP ステータスコードを収集し、 その値とタイプを LoadVars オブジェクトのインスタンスに代入します。 (この例では、実行時にインスタンスメンバー this.httpStatus および this.httpStatusType が作成される点に注意してください。)onData() ハンドラはこれらのインスタンスメ ンバーを使用して、デバッグに役立つ HTTP 応答に関する情報をトレースします。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 68 サーバーサイド ActionScript リファレンスガイド var myLoadVars = new LoadVars(); myLoadVars.onHTTPStatus = function(httpStatus) { this.httpStatus = httpStatus; if(httpStatus < 100) { this.httpStatusType = "flashError"; } else if(httpStatus < 200) { this.httpStatusType = "informational"; } else if(httpStatus < 300) { this.httpStatusType = "successful"; } else if(httpStatus < 400) { this.httpStatusType = "redirection"; } else if(httpStatus < 500) { this.httpStatusType = "clientError"; } else if(httpStatus < 600) { this.httpStatusType = "serverError"; } } myLoadVars.onData = function(src) { trace(">> " + this.httpStatusType + ": " + this.httpStatus); if(src != undefined) { this.decode(src); this.loaded = true; this.onLoad(true); } else { this.onLoad(false); } } myLoadVars.onLoad = function(success) {} myLoadVars.load("http://weblogs.macromedia.com/mxna/flashservices/getMostRecentPosts.cfm"); LoadVars.onLoad() myLoadVars.onLoad(success){} LoadVars.load() または LoadVars.sendAndLoad() の操作が完了したときに呼び出されます。変数が正常にロードされた場合、 success パラメータは true です。変数が受信されなかったか、サーバーから応答を受信する際にエラーが発生した場合は、 success パラメータは false です。 success パラメータが true である場合、LoadVars.load() または LoadVars.sendAndLoad() でダウンロードされた変数が myLoadVars に格納されます。これらの変数は、onLoad() ハンドラが呼び出されると利用可能となります。 使用できるバージョン Flash Media Server 2 パラメータ success LoadVars.load() 操作が正常に完了したか(true)、正常に完了しなかったか(false)を示すブール値。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 69 サーバーサイド ActionScript リファレンスガイド 例 次の例では、新しい LoadVars オブジェクトを作成し、リモートの URL から変数をこのオブジェクトにロードすることを 試み、結果を出力します。 myLoadVars = new LoadVars(); myLoadVars.onLoad = function(result){ trace("myLoadVars load success is " + result); } myLoadVars.load("http://www.someurl.com/somedata.txt"); LoadVars.send() myLoadVars.send(url [, target, method]) myLoadVars オブジェクト内の変数を、指定された URL に送信します。myLoadVars オブジェクト内の列挙可能なすべての 変数は、連結して 1 つの文字列になり、HTTP POST メソッドを使用して URL に送信されます。 HTTP 要求ヘッダーで送信される MIME コンテンツタイプは、LoadVars.contentType の値です。 使用できるバージョン Flash Media Server 2 パラメータ url 文字列。変数のアップロード先である URL。 target File オブジェクト。このオプションパラメータを使用すると、返されたデータはすべて、指定された File オブジェク トに出力されます。このパラメータを省略すると、応答は切り捨てられます。 method HTTP プロトコルの GET メソッドまたは POST メソッドを示す文字列。デフォルト値は POST です。このパラ メータはオプションです。 戻り値 成功(true)または失敗(false)を示すブール値。 関連項目 LoadVars.sendAndLoad() LoadVars.sendAndLoad() myLoadVars.sendAndLoad(url, target[, method ]) myLoadVars オブジェクト内の変数を、指定された URL に送信します。サーバーの応答がダウンロードされ、変数データと して解析され、結果の変数が target オブジェクトに挿入されます。変数の送信方法は、LoadVars.send() の場合と同じです。 変数を target にダウンロードする方法は LoadVars.load() と同じです。 使用できるバージョン Flash Media Server 2 パラメータ url 文字列。変数のアップロード先である URL。 target ダウンロードされる変数を受け取る LoadVars オブジェクト。 method 文字列。HTTP プロトコルの GET メソッドまたは POST メソッド。デフォルト値は POST です。このパラメータ はオプションです。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 70 サーバーサイド ActionScript リファレンスガイド 戻り値 成功(true)または失敗(false)を示すブール値。 LoadVars.toString() myLoadVars.toString() myLoadVars 内の列挙可能な変数をすべて含む文字列を、MIME コンテンツエンコード application/x-www-form- urlencoded で返します。 使用できるバージョン Flash Media Server 2 戻り値 文字列。 例 次の例では、新しい LoadVars() オブジェクトをインスタンス化し、2 つのプロパティを作成します。次に、toString() を使 用して、両方のプロパティを含む URL エンコード形式の文字列を返します。 var my_lv = new LoadVars(); my_lv.name = "Gary"; my_lv.age = 26; trace (my_lv.toString()); //output: age=26&name=Gary Log クラス Log クラスでは、オプションパラメータとして WebService クラスのコンストラクタに渡すことができる Log オブジェクト を作成できます。詳細については、124 ページの「WebService コンストラクタ」を参照してください。 使用できるバージョン Flash Media Server 2 イベントハンドラ一覧 イベントハンドラ 説明 Log.onLog() ログメッセージがログに送信されたときに呼び出されます。 Log コンストラクタ new Log([logLevel][, logName]) オプションパラメータとして WebService クラスのコンストラクタに渡すことができる Log オブジェクトを作成します。 使用できるバージョン Flash Media Server 2 パラメータ logLevel 次のいずれかの値(明示的に設定しない場合、デフォルトのレベルは Log.BRIEF になります)。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 71 サーバーサイド ActionScript リファレンスガイド 値 説明 Log.BRIEF 主要なライフサイクルイベントとエラー通知を受信します。 Log.VERBOSE すべてのライフサイクルイベントとエラー通知を受信します。 Log.DEBUG メトリクスに加え、細粒度のイベントとエラーを受信します。 logName 同じ出力に対して同時に実行している複数のログを区別するために使用されるオプションのパラメータ。 戻り値 Log オブジェクト。 例 次の例では、新しい Log クラスのインスタンスを作成します。 newLog = new Log(); Log.onLog() myLog.onLog(message){} ログメッセージがログに送信されたときに呼び出されます。 使用できるバージョン Flash Media Server 2 パラメータ message ログメッセージ。 NetConnection クラス サーバーサイドの NetConnection クラスでは、Flash Media Server アプリケーションインスタンスとアプリケーション サーバー間、別の Flash Media Server 間、または同一サーバー上の別の Flash Media Server アプリケーションインスタン ス間の双方向の接続を作成することができます。NetConnection オブジェクトを使用すると、効力のあるアプリケーショ ンを作成できます。例えば、アプリケーションサーバーから気象情報を取得したり、Flash Media Server またはアプリケー ションインスタンスを実行する他のサーバーと、アプリケーションの負荷ジェネレータを共有したりできます。 使用できるバージョン Flash Communication Server 1 プロパティ一覧 プロパティ 説明 NetConnection.isConnected 読み取り専用。接続が行われたかどうかを示すブール値。 NetConnection.objectEncoding 2 つのサーバー間でバイナリデータを渡すために使用する Action Message Format(AMF)バージョ ン。 NetConnection.uri 読み取り専用。NetConnection.connect() メソッドの URI パラメータを示す文字列。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 72 サーバーサイド ActionScript リファレンスガイド メソッド一覧 メソッド 説明 NetConnection.addHeader() コンテキストヘッダーを AMF (Action Message Format) パケット構造に追加します。 NetConnection.call() アプリケーションインスタンスが接続している別の Flash Media Server またはアプリケーションサー バーで、コマンドまたはメソッドを起動します。 NetConnection.close() サーバーとの接続を終了します。 NetConnection.connect() 別の Flash Media Server、または Adobe ColdFusion などの Flash Remoting Server に接続します。 イベントハンドラ一覧 イベントハンドラ 説明 NetConnection.onStatus() NetConnection オブジェクトのステータスが変化するたびに呼び出されます。 NetConnection コンストラクタ new NetConnection() NetConnection クラスの新しいインスタンスを作成します。 使用できるバージョン Flash Communication Server 1 戻り値 NetConnection オブジェクト。 例 次の例では、NetConnection クラスの新しいインスタンスを作成します。 newNC = new NetConnection(); NetConnection.addHeader() nc.addHeader(name, mustUnderstand, object) コンテキストヘッダーを AMF (Action Message Format) パケット構造に追加します。このヘッダーは、今後、各 AMF パ ケットが送信される際には一緒に送信されます。同じ名前を使用して addHeader() を呼び出すと、既存のヘッダーが新しい ヘッダーに置き換えられます。新しいヘッダーは、NetConnection オブジェクトのある間に存在し続けます。ヘッダーを 削除するには、addHeader() を呼び出し、削除するヘッダーの名前と未定義オブジェクトを渡します。 使用できるバージョン Flash Communication Server 1 パラメータ name ヘッダーおよびそれに関連する ActionScript オブジェクトデータを識別する文字列。 mustUnderstand ブール値。true は、サーバーがこのヘッダーに対応しており、次のヘッダーまたはメッセージを処理する 前に、サーバーでヘッダーを処理する必要があることを示します。 object オブジェクト。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 73 サーバーサイド ActionScript リファレンスガイド 例 次の例では、新しい NetConnection インスタンス nc を作成し、Web サーバー www.foo.com にあるアプリケーション ( ポート 1929 で認識中 ) に接続します。このアプリケーションは、サービス /blag/SomeCoolService をディスパッチしま す。最後のコード行で、foo という名前のヘッダーが追加されます。 nc=new NetConnection(); nc.connect("http://www.foo.com:1929/blag/SomeCoolService"); nc.addHeader("foo", true, new Foo()); NetConnection.call() nc.call(methodName, [resultObj [, p1, ..., pN]) アプリケーションインスタンスが接続している別の Flash Media Server またはアプリケーションサーバーで、コマンドまた はメソッドを呼び出します。サーバー上の NetConnection.call() メソッドも、クライアント上の NetConnection.call() メソッ ドも同じように動作して、リモートサーバー上のコマンドを呼び出します。 注意:サーバーからクライアント上のメソッドを呼び出す場合は、Client.call() メソッドを使用します。 使用できるバージョン Flash Communication Server 1 パラメータ methodName "[objectPath/]method" という形式で指定したメソッドを示す文字列。例えば、someObj/doSomething コマンド は、p1, ..., pN パラメータをすべて付けて clientObj.someObj.doSomething() メソッドを呼び出すよう、リモートサーバーに指 示します。オブジェクトパスが指定されていない場合は、リモートサーバー上の clientObj.doSomething() が呼び出されます。 resultObj オブジェクト。このオプションのパラメータは、サーバーからの戻り値を処理するために使用されます。結果オ ブジェクトには、ユーザー定義の任意のオブジェクトを指定でき、返された結果を処理する onResult() および onStatus() の 2 つの定義済みメソッドを含めることができます。結果としてエラーが戻った場合は onStatus() が呼び出され、それ以外の場 合は onResult() が呼び出されます。 p1, ..., pN 他の ActionScript オブジェクトへの参照を含む、任意の ActionScript 型であるオプションのパラメータ。これ らのパラメータは、リモートアプリケーションサーバーでのメソッドの実行時に、methodName パラメータに渡されます。 戻り値 RTMP 接続では、methodName への呼び出しがクライアントに送信された場合はブール値 true が戻り、それ以外の場合は false が戻ります。アプリケーションサーバー接続では、常に true が戻ります。 例 次の例では、RTMP を使用して、1 つの Flash Media Server から別の Flash Media Server に対する呼び出しを実行しま す。このコードでは、server 2 上のアプリケーション App1 への接続が行われ、server 2 上の Sum() メソッドが呼び出され ます。 nc1.connect("rtmp://server2.mydomain.com/App1", "svr2",); nc1.call("Sum", new Result(), 3, 6); 次のサーバーサイド ActionScript コードは server 2 にあります。クライアントが接続すると、このコードによって、svr1 に一致するパラメータがあるかどうかがチェックされます。クライアントにこのパラメータがある場合は、それに対応する よう Sum() メソッドが定義されています。そのため、svr1 からこのメソッドが呼び出されたときは、svr2 は該当するメソッ ドで応答することができます。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 74 サーバーサイド ActionScript リファレンスガイド application.onConnect = function(clientObj){ if(arg1 == "svr1"){ clientObj.Sum = function(p1, p2){ return p1 + p2; } } return true; }; 次の例では、Action Message Format(AMF)要求を使用して、アプリケーションサーバーへの呼び出しを行います。こ れによって、Flash Media Server はアプリケーションサーバーに接続し、quote() メソッドを呼び出すことができます。次の コードにあるように、Java™ アダプタは、ドットの左側にある ID をクラス名として、右側の ID をクラスのメソッド名とし て使用して、この呼び出しをディスパッチします。 nc = new NetConnection; nc.connect("http://www.xyz.com/java"); nc.call("myPackage.quote", new Result()); NetConnection.close() nc.close() サーバーとの接続を終了します。接続を閉じた後、その NetConnection インスタンスを再使用して元のアプリケーション に再接続したり、新しいアプリケーションに接続することができます。 注意:NetConnection.close() メソッドは、HTTP 接続には影響しません。 使用できるバージョン Flash Communication Server 1 NetConnection.connect() nc.connect(URI, [p1, ..., pN]) 別の Flash Media Server、または Adobe® ColdFusion® などの Flash Remoting Server に接続します。 NetConnection.connect() を呼び出して、HTTP を介して Flash Remoting ゲートウェイを実行するアプリケーションサー バーに接続するか、別の Flash Media Server に接続して、次のバージョンの RTMP を介してオーディオ、ビデオおよび データを共有することができます。 プロトコル 説明 RTMP Real-Time Messaging Protocol RTMPS Real-Time Messaging Protocol over SSL RTMP 接続では、application.onStatus() コールバック関数を記述して NetConnection.isConnected プロパティをチェックする と、RTMP 接続が成功したかどうかを確認できるため便利です。Action Message Format(AMF)接続の場合は、 NetConnection.onStatus() をチェックします。 使用できるバージョン Flash Communication Server 1 パラメータ URI 接続する URI を示す文字列。URI は次の形式になります。 [protocol://]host[:port]/appName[/instanceName] FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 75 サーバーサイド ActionScript リファレンスガイド 次のような URI が有効です。 http://appServer.mydomain.com/webApp rtmp://rtserver.mydomain.com/realtimeApp rtmps://rtserver.mydomain.com/secureApp rtmp://localhost/realtimeApp rtmp:/realtimeApp p1, ..., pN 他の ActionScript オブジェクトへの参照を含む、任意の ActionScript 型であるオプションのパラメータ。これ らのパラメータは、接続パラメータとして、RTMP 接続用の application.onConnect() イベントハンドラに送信されます。ア プリケーションサーバーへの AMF 接続では、RTMP パラメータは無視されます。 戻り値 RTMP 接続では、接続に成功した場合はブール値 true が戻り、失敗した場合は false が戻ります。アプリケーションサー バーへの AMF 接続では、常に true が戻ります。 例 次の例では、Flash Media Server 上のアプリケーションインスタンスへの RTMP 接続を作成します。 nc = new NetConnection(); nc.connect("rtmp://tc.foo.com/myApp/myConn"); NetConnection.isConnected nc.isConnected 読み取り専用。接続が行われたかどうかを示すブール値。サーバーに接続されている場合は true に設定されます。onStatus() コールバック関数でこのプロパティ値をチェックすると便利です。アプリケーションサーバーへの AMF 接続の場合、この プロパティは常に true です。 使用できるバージョン Flash Communication Server 1 例 次の例では、onStatus() ハンドラ内で NetConnection.isConnected を使用して、接続が行われたかどうかをチェックします。 nc = new NetConnection(); nc.connect("rtmp://tc.foo.com/myApp"); nc.onStatus = function(infoObj){ if (info.code == "NetConnection.Connect.Success" && nc.isConnected){ trace("We are connected"); } }; NetConnection.objectEncoding nc.objectEncoding 2 つのサーバー間でバイナリデータを渡すために使用する Action Message Format(AMF)バージョン。指定できる値は 3(ActionScript 3.0 形式)と 0(ActionScript 1.0 および ActionScript 2.0 形式)です。デフォルト値は 3 です。Flash Media Server が別のサーバーに接続しようとするクライアントとして動作する場合は、クライアントのエンコードがリモー トサーバーのエンコードに一致する必要があります。 objectEncoding の値は、code プロパティが NetConnection.Connect.Success である NetConnection.onStatus() イベントをサー バーが受け取ったときに、次の規則に従って動的に決定されます。 • onStatus()info オブジェクトに objectEncoding プロパティが含まれる場合は、その値が使用されます。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 76 サーバーサイド ActionScript リファレンスガイド • onStatus()info オブジェクトに objectEncoding プロパティが含まれない場合は、接続しているサーバーで objectEncoding が 3 に設定されている場合でも、0 が使用されます。 • NetConnection インスタンスが接続された場合は、その objectEncoding プロパティが読み取り専用になります。 リモートの Flash Media Server バージョン 2 以前(AMF0 のみをサポート)に接続する場合は、これらの規則によって、 Flash Media Server 3 が AMF0 クライアントになります。 注意:サーバーでは、Flash Remoting 関数を実行すると、データが常に AMF0 でシリアル化されます。 使用できるバージョン Flash Media Interactive Server 3 および Flash Media Development Server 3 NetConnection.onStatus() nc.onStatus = function(infoObject) {} NetConnection オブジェクトのステータスが変化するたびに呼び出されます。例えば、RTMP 接続でサーバーとの接続が 失われると、NetConnection.isConnected プロパティが false に設定され、NetConnection.Connect.Closed のステータスメッ セージとともに NetConnection.onStatus() が呼び出されます。AMF 接続の場合、NetConnection.onStatus() は、接続が失敗 したことを示すためにのみ使用されます。接続できたかどうかをチェックするには、このイベントハンドラを使用します。 使用できるバージョン Flash Communication Server 1 パラメータ infoObject NetConnection 情報オブジェクトのステータスについての情報を提供するプロパティを指定したオブジェクト。 このパラメータはオプションですが、通常は使用されます。NetConnection 情報オブジェクトには、次のプロパティが含 まれています。 プロパティ 説明 code 発生したイベントを識別する文字列。 description コードに関する詳細な情報を含む文字列。このプロパティが含まれない情報オブジェクトもあります。 level イベントの重大度を示す文字列。 次の表は、code プロパティと level プロパティの値と意味を示しています。 コード レベル NetConnection.Call.Failed error 説明 NetConnection.call() メソッドが、サーバー側のメソッドまたはコマンド を呼び出すことができませんでした。 NetConnection.Connect.AppShutdown error アプリケーションがシャットダウンされた ( アプリケーションがメモリリ ソース不足に陥り、サーバーのクラッシュを防止するためにシャットダウ ンする必要がある場合など ) か、あるいはサーバーがシャットダウンしま した。 NetConnection.Connect.Closed status 接続の終了が正常に行われました。 NetConnection.Connect.Failed error 接続に失敗しました。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 77 サーバーサイド ActionScript リファレンスガイド コード レベル 説明 NetConnection.Connect.Rejected error クライアントがアプリケーションへの接続を許可されていないか、接続を 試行する際に指定されたアプリケーション名がサーバーで見つかりません でした。この情報オブジェクトにも、application.rejectConnection() から 返された値を含む application プロパティがあります。 NetConnection.Connect.Success status 接続に成功しました。 NetConnection.Proxy.NotResponding error プロキシサーバーが応答しません。ProxyStream クラスを参照してくださ い。 例 次の例では、onStatus() ハンドラ用の関数を定義します。この関数は、接続が成功したかどうかを示すメッセージを出力し ます。 nc = new NetConnection(); nc.onStatus = function(info){ if (info.code == "NetConnection.Connect.Success") { _root.gotoAndStop(2); } else { if (! nc.isConnected){ _root.gotoAndStop(1); } } }; NetConnection.uri nc.uri 読み取り専用。NetConnection.connect() メソッドの URI パラメータを示す文字列。このプロパティは、 NetConnection.connect() を呼び出す前と、NetConnection.close() を呼び出した後には、null に設定されます。 使用できるバージョン Flash Communication Server 1 NetStream クラス NetConnection オブジェクトを通じて、Flash Media Interactive Server とリモートの Flash Media Interactive Server と の間に一方通行のストリーミング接続を開きます。NetStream オブジェクトは NetConnection オブジェクト内のチャネル です。このチャネルを介してデータをパブリッシュするには、NetStream.publish() を呼び出します。クライアントサイドの NetStream オブジェクトとは異なり、サーバーサイドの NetStream オブジェクトでパブリッシュすることができるのは データだけです。パブリッシュするストリームにサブスクライブしたり、記録されたストリームを再生することはできませ ん。 NetStream クラスを使用することで、より多くのクライアントをサポートするためにライブラリブロードキャストアプリ ケーションの規模を調整することができます。Flash Media Interactive Server では、特定の数のクライアントのサブスクラ イブだけがサポートされます。この数値を増やすには、NetStream クラスを使用して、クライアントからサーバーへの接続 を 1 つに維持しながら、トラフィックをリモートサーバーに移動します。 次の手順は、リモートの Flash Media Interactive Server にストリームをパブリッシュするワークフローを示しています。 1 NetConnection コンストラクタ nc = new NetConnection を呼び出して、NetConnection オブジェクトを作成します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 78 サーバーサイド ActionScript リファレンスガイド 2 nc.connect("rtmp://serverName/appName/appInstanceName") を呼び出して、リモートの Flash Media Interactive Server 上のアプリケーションに接続します。 注意:リモートサーバーに接続する場合は、RTMPT、RTMPE または RTMPTE を使用することはできません。 1 NetStream コンストラクタ ns = new NetStream(nc) を呼び出して、この接続を介したストリームを作成します。 2 ns.publish("myStream") を呼び出して、ストリームに固有の名前を付けて、ストリームを介してリモートサーバーにデー タを送信します。データをパブリッシュしたときに、そのデータを記録することもできます。これにより、後でデータを 再生することができます。 3 このストリームにサブスクライブするクライアントは、(クライアントサイドスクリプトで)リモートサーバー上の同じ アプリケーションに接続し、NetConnection.connect("rtmp://serverName/appName/appInstanceName") を呼び出してから、 同じストリーム名を持つ NetStream.play("myStream") を呼び出します。 使用できるバージョン Flash Media Interactive Server 3 および Flash Media Development Server 3 プロパティ一覧 プロパティ 説明 NetStream.bufferTime 読み取り専用。NetStream.setBufferTime() メソッドによってバッファに割り当てられている秒数を示します。 NetStream.time 読み取り専用。ストリームがパブリッシュされた秒数を示します。 メソッド一覧 メソッド 説明 NetStream.attach() NetStream オブジェクトにデータソースを割り当てます。 NetStream.publish() リモートサーバーにストリームをパブリッシュします。 NetStream.send() ストリームを介してデータメッセージをブロードキャストします。 NetStream.setBufferTime() 送信バッファのサイズを秒単位で設定します。 イベントハンドラ一覧 イベントハンドラ 説明 NetStream.onStatus() ステータスが変更された場合、または NetStream Object でエラーが発生した場合に呼び出されます。 NetStream クラスのコンストラクタ ns = new NetStream(connection) 指定された NetConnection オブジェクトを使用して、データをパブリッシュ(送信)するためのストリームを生成します。 それに対し、1 つのサーバー接続に同時実行する複数のストリーム(複数の NetStream オブジェクト)を生成することは可 能です。 使用できるバージョン Flash Media Interactive Server 3 および Flash Media Development Server 3 パラメータ connection NetConnection オブジェクト。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 79 サーバーサイド ActionScript リファレンスガイド 戻り値 正常に終了した場合は NetStream オブジェクト。そうでない場合は null。 例 nc = new NetConnection(); nc.connect("rtmp://xyz.com/myApp"); ns = new NetStream(nc); NetStream.attach() ns.attach(stream) NetStream オブジェクトにデータソースを割り当てます。 使用できるバージョン Flash Media Interactive Server 3 および Flash Media Development Server 3 パラメータ stream Stream オブジェクト。false を渡すと、割り当てられている Stream オブジェクトが NetStream オブジェクトから 切り離されます。 戻り値 ブール値。割り当てられているオブジェクトが有効なデータソースである場合は true、そうでない場合は false になります。 例 myStream = Stream.get("foo"); ns = new NetStream(nc); ns.attach(myStream); NetStream.bufferTime ns.bufferTime 読み取り専用。NetStream.setBufferTime() メソッドによってバッファに割り当てられている秒数を示します。 使用できるバージョン Flash Media Interactive Server 3 および Flash Media Development Server 3 NetStream.onStatus() ns.onStatus = function(infoObject){}) ステータスが変更された場合、または NetStream オブジェクトでエラーが発生した場合に呼び出されます。リモートサー バーは、NetStream.publish() に対する呼び出しを受諾または拒否することができます。 使用できるバージョン Flash Media Interactive Server 3 および Flash Media Development Server 3 パラメータ infoObject NetStream 呼び出しのステータスに関する情報を提供する code および level プロパティを持つオブジェクト。ど ちらのプロパティも文字列です。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 80 サーバーサイド ActionScript リファレンスガイド Code プロパティ Level プロパティ 説明 NetStream.Publish.Start status パブリッシュの試行が成功しました。 NetStream.Publish.BadName error すでに別のユーザーによってパブリッシュされているストリームをパブ リッシュしようとしました。 NetStream.Unpublish.Success status ストリームからのパブリッシュ解除が正常に行われました。 NetStream.Record.Start status 記録が開始されました。 NetStream.Record.Stop status 記録が停止されました。 NetStream.Record.NoAccess status 読み取り専用ストリームを記録しようとしました。 NetStream.Record.Failed error ストリームを記録する試行が失敗しました。 NetStream.Record.DiskQuotaExceed ed error ディスク割り当てを超過したため、ストリームの記録に失敗しました。詳 細については、「Stream.record()」を参照してください。 例 ns = new NetStream(nc); ns.onStatus = function(info){ if (info.code == "NetStream.Publish.Start"){ trace("It is now publishing"); } ns.publish("foo", "live"); } NetStream.publish() ns.publish(name, howToPublish) リモートサーバーにストリームをパブリッシュします。NetStream.onStatus() ハンドラでステータスを確認し、リモートサー バーがパブリッシュする側を受け入れたことを確認します。ストリームを別のクライアントがパブリッシュしている場合は、 publish() 呼び出しがリモートサーバーに到達したときに失敗することがあります。この場合、リモートサーバーは "NetStream.Publish.BadName" のステータスメッセージを NetStream.onStatus() メソッドに送ります。 使用できるバージョン Flash Media Interactive Server 3 および Flash Media Development Server 3 パラメータ name パブリッシュするストリームを識別する文字列。false を渡すと、ストリームのパブリッシュが停止します。次のシン タックスを使用します。 ファイル形式 シンタックス FLV ns.publish("filename") MP3 ns.publish("mp3:filename") ns.publish("id3:filename") MP4 ns.publish("mp4:filename") ns.publish("mp4:filename.mp4") ns.publish("mp4:filename.f4v") FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 81 サーバーサイド ActionScript リファレンスガイド howToPublish ストリームのパブリッシュ方法を指定するオプションの文字列。有効値は、"record"、"append" および "live" です。デフォルト値は "live" です。このパラメータを省略するか、「live」を渡した場合、ライブデータが記録されずにパブ リッシュされます。この名前のファイルが既にリモートサーバーにある場合は、削除されます。 注意:ファイルが読み取り専用である場合はライブデータがパブリッシュされ、ファイルは削除されません。 "record" を渡すと、ストリームがパブリッシュされ、データが新規ファイルに記録されます。このファイルが存在する場合 は、上書きされます。"append" を渡すと、ストリームがパブリッシュされ、name で指定された既存のストリームにデータが 付加されます。ファイルが見つからない場合は、新しいファイルが作成されます。 記録されたファイルは、アプリケーションのフォルダの streams サブフォルダ (RootInstall/applications/sampleApplication/_definst_/streams など)に格納されます。記録されたファイルのファイ ル名は、name パラメータで渡されたファイル名になります。例えば、NetStream.publish("mp4:streamname.f4v"、"record") では streamname.f4v ファイルが作成されます。 例 application.onPublish = function(client, myStream){ nc = new NetConnection(); nc.connect("rtmp://example.com/myApp"); ns = new NetStream(nc); ns.attach(myStream); ns.publish(myStream.name, "live"); }; 次の例に、リモートサーバーに F4V ファイルを記録する方法を示します。 application.onPublish = function(client, myStream){ nc = new NetConnection(); nc.connect("rtmp://example.com/myApp"); ns = new NetStream(nc); ns.attach(myStream); ns.publish("mp4:" + myStream.name, "record"); }; NetStream.send() ns.send(handlerName, [p1, ..., pN]) ストリームを介してデータメッセージをブロードキャストします。 使用できるバージョン Flash Media Interactive Server 3 および Flash Media Development Server 3 パラメータ handlerName メッセージを受信するハンドラの名前を識別する文字列。 p1, ..., pN 任意のタイプのオプションのパラメータ。それらは直列化され、接続を介して送信されます。受信側のハンドラは 同じ順番でそれらを受け取ります。 戻り値 ブール値。データメッセージが送出された場合は true、送出されなかった場合は false になります。 例 次のクライアントサイドコードが、myApp に接続されている各クライアントの foo ハンドラ関数に "Hello world" というメッ セージをブロードキャストします。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 82 サーバーサイド ActionScript リファレンスガイド nc = new NetConnection(); nc.connect("rtmp://xyz.com/myApp"); ns = new NetStream(nc); ns.send("foo", "Hello world"); NetStream.setBufferTime() ns.setBufferTime(bufferTime) 送信バッファのサイズを秒単位で設定します。パブリッシュされると、ローカルサーバー内のバッファが制御されます。 使用できるバージョン Flash Media Interactive Server 3 および Flash Media Development Server 3 パラメータ bufferTime 送信バッファのサイズを秒単位で示す数値。 例 nc = new NetConnection(); nc.connect("rtmp://xyz.com/myApp"); ns = new NetStream(nc); ns.setBufferTime(2); NetStream.time ns.time 読み取り専用。ストリームがパブリッシュされた秒数を示します。これは、NetStream.attach() メソッドに対する呼び出しで 設定されているソースからのデータフローがあるかどうかを示す指標になります。 使用できるバージョン Flash Media Interactive Server 3 および Flash Media Development Server 3 ProxyStream クラス DVR 機能を使用する大規模なアプリケーションを構築するには、ProxyStream クラスを使用します。DVR 機能を使用す ると、ユーザーはライブビデオを一時停止し、一時停止した場所から再生を再開できるようになります。ユーザーは、ビデ オの記録されたセクションを巻き戻して再生し、前方向にシークしてもう一度追いつくことができます。 アプリケーションを拡大するには、サーバーサイド NetConnection オブジェクトを使用してサーバーのチェーンを作成し ます。そのようなシナリオでは、すべてのサーバーがローカルサーバーとして実行されます。このシナリオについて説明す るため、最上位層にある取り込みサーバーをオリジンサーバー、中間層にあるサーバーを中間サーバーおよび最下位層にあ るサーバー(加入者として機能)をエッジサーバーと呼びます。 注意:このシナリオの「オリジン」や「エッジ」という用語は、ローカルおよびリモート操作を指しているのではありませ ん(Vhost.xml 構成ファイルの Proxy セクションを参照)。このシナリオのすべてのサーバーは、ローカルモードで動作し ます。 パブリッシュする側により制御されるサーバーのみで、ストリームが記録されます。それよりチェーンの下にあり、加入者 に近いサーバーではストリームは記録されず、再生可能なストリームはありません。記録されるストリームがサーバーに存 在しない場合、加入者はそのストリームにアクセスできません。セグメントを使用可能な別のサーバーから、記録されたス トリームのセグメントを取り込むには、ProxyStream クラスを使用します。ProxyStream.proxyFrom() を呼び出して、中間 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 83 サーバーサイド ActionScript リファレンスガイド サーバーをオリジンサーバーと並べます。記録されたストリームが中間サーバーで要求された場合、必要なセグメントがオ リジンサーバーから自動的に取り込まれます。セグメントは、オリジンサーバーに格納されているのと同じように中間サー バーのメモリキャッシュに格納されます。中間サーバーを通過するすべての加入者は、キャッシュから直接データを取得す るため、複数のクライアントでセグメントを共有できます。必要な場合は、オリジンサーバーからデータを取り込んだ中間 サーバーからデータを取り込むように、エッジサーバーを設定します。ストリームがアイドル状態のときは別のソースに フェールオーバーするように、アプリケーションを記述することをお勧めします。 中間サーバーとエッジサーバーでディスクを使用する必要はありません。別のサーバーから取り込まれたファイルセグメン トは、メモリキャッシュに格納されます。サーバーでは、LRU(Least Recently Used)スキームを使用してキャッシュが 保持されます。メモリが構成した値に達すると、サーバーによりセグメントがキャッシュから押し出されます。帯域幅を節 約してパフォーマンスを上げるため、サーバーのディスク上のメモリにもセグメントを保存できます。キャッシュディレク トリの場所と、キャッシュの最大サイズを構成できます。 使用できるバージョン Flash Media Server 3.5 メソッド一覧 メソッド 説明 ProxyStream.proxyFrom() NetConnection を介して、ある Flash Media Server から別の Flash Media Server にストリームをプロ キシします。 ProxyStream.stop() ストリームのプロキシを停止します。 イベントハンドラ一覧 イベントハンドラ ProxyStream.onStatus() 説明 ステータスが変更された場合、または ProxyStream オブジェクトでエラーが発生した場合に呼び出され ます。 ProxyStream コンストラクタ new ProxyStream(connection) ProxyStream クラスのインスタンスを作成します。 使用できるバージョン Flash Media Server 3.5 パラメータ connection NetConnection オブジェクト。 戻り値 ProxyStream オブジェクト。 例 次の例では、ProxyStream クラスのインスタンスを作成します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 84 サーバーサイド ActionScript リファレンスガイド nc = new NetConnection(); nc.connect("rtmp://fmsexample.adobe.com/testapp"); nc.onStatus(info){ if(info.code == "NetConnection.Connect.Success"){ ps = new ProxyStream(nc); // Use ps.onStatus to check status } }; ProxyStream.onStatus() ps.onStatus = function(infoObject){}) ステータスが変更された場合、または ProxyStream オブジェクトでエラーが発生した場合に呼び出されます。 使用できるバージョン Flash Media Server 3.5 パラメータ infoObject ProxyStream オブジェクトのステータスに関する情報を提供する code および level プロパティを持つオブジェク ト。どちらのプロパティも文字列です。 Code プロパティ Level プロパティ 説明 ProxyStream.Proxy.Start status 正常にパブリッシュされたソースストリーム。 ProxyStream.Proxy.Stop status 正常に停止されたソースストリーム。 ProxyStream.Proxy.BadName error ローカル名が無効であったか、存在しているため、パブリッシュに失 敗しました。 例 nc = new NetConnection; nc.onStatus = function(info) { if (info.code == "NetConnection.Connect.Success"){ // Create a proxy to the remote stream "remoteStream" // This stream is published locally as "localStream" ps = new ProxyStream(nc); ps.onStatus = function(info) { if (info.code == "ProxyStream.Proxy.Start") { // The local stream was published. } else if (info.code == "ProxyStream.Proxy.Stop") { // The local stream was stopped. } else if (info.code == "ProxyStream.Proxy.BadName") { // The publish failed because the local name was invalid // or existed. } }; ps.proxyFrom("localStream", "remoteStream"); } }; nc.connect("rtmp://origin.mydvr.com/dvr"); 次の例では、2 つのオリジン接続 primaryURI および backupURI を使用して、フェールオーバーをデモンストレーションし ます。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 85 サーバーサイド ActionScript リファレンスガイド var primaryUri = "rtmp://primary/app"; var backupUri = "rtmp://backup//app"; function createNetConn(uri){ _root.netConn = new NetConnection(); _root.netConn.onStatus = function(info) { if (info.code == "NetConnection.Connect.Success"){ // Connection is good, create the ProxyStream createProxyStream(); } else if (info.code == "NetConnection.Proxy.NotResponding" || info.code == "NetConnection.Connect.Closed") { // The proxy isn't responding to our requests, or the connection was closed, // so switch to an alternate origin... var nextUri; if (uri == primaryUri){ nextUri = backupUri; } else { nextUri = primaryUri; } createNetConn(nextUri); } }; _root.netConn.connect(uri); } function createProxyStream() { _root.ps = new ProxyStream(_root.netConn); _root.ps.onStatus = function(info) { // Handle ProxyStream status notifications }; _root.ps.proxyFrom("localStream", "remoteStream"); } createNetConn(primaryUri); ProxyStream.proxyFrom() ps.proxyFrom(local, remote) NetConnection を介して、ある Flash Media Server から別の Flash Media Server にストリームをプロキシします。スト リームは、ライブでも記録でも、またはその両方でも構いません。 使用できるバージョン Flash Media Server 3.5 パラメータ local ローカルストリーム名を指定する文字列。 remote リモートストリーム名を指定する文字列。 ProxyStream.stop() ps.stop() ストリームのプロキシを停止します。 使用できるバージョン Flash Media Server 3.5 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 86 サーバーサイド ActionScript リファレンスガイド パラメータ なし SharedObject クラス SharedObject クラスを使用すると、複数のクライアントアプリケーションの間で、リアルタイムでサーバーにデータを格 納したり、データを共有したりできます。アプリケーションが終了した後、共有オブジェクトはサーバー上で一時的または 永続的に存在できます。そのため、共有オブジェクトをリアルタイムデータ転送デバイスと見なすことができます。 注意:次の項目では、サーバーサイドの SharedObject クラスについて説明しています。また、クライアントサイド SharedObject クラスを使用して、共有オブジェクトを作成することもできます。 以下は、サーバーサイド ActionScript の共有オブジェクトの一般的な用途です。 1 サーバー上でのデータの保存と共有。共有オブジェクトは、サーバー上でデータを格納して、他のクライアントがその データを取得できるようにします。例えば、電話番号リストなどの、サーバーで永続的に存在するリモート共有オブジェ クトを開設できます。クライアントがいつ共有オブジェクトに変更を加えても、共有オブジェクトに接続中のすべてのク ライアントや、これから接続するすべてのクライアントが改訂データを使用できます。また、そのオブジェクトがローカ ルでも永続的に存在し、サーバーに接続していないときにクライアントがデータを変更した場合は、クライアントが次に そのオブジェクトに接続したときに、その変更がリモート共有オブジェクトにコピーされます。 2 リアルタイムでのデータ共有。共有オブジェクトは、複数のクライアント間でリアルタイムにデータを共有できます。例 えば、チャットルームに接続しているユーザーのリストのように、接続中のすべてのクライアントが見ることのできるリ アルタイムデータを格納する、リモート共有オブジェクトを開設できます。ユーザーがチャットルームに入退室するとき にオブジェクトが更新され、オブジェクトに接続しているすべてのクライアントに更新後のチャットルームユーザーのリ ストが表示されます。 サーバーサイド ActionScript で共有オブジェクトを使用する場合には、次の事項を理解しておく必要があります。 • サーバーサイドの ActionScript メソッド SharedObject.get() は、リモート共有オブジェクトを作成します。ローカル 共有オブジェクトを作成するサーバーサイドメソッドはありません。ローカル共有オブジェクトは、永続的でない限 り、メモリに保存されます。永続的である場合は .sol ファイルに保存されます。 • サーバーに保存されているリモート共有オブジェクトには、ファイル拡張子 .fso が付けられ、オブジェクトを作成し たアプリケーションのサブディレクトリに保存されます。クライアント上のリモート共有オブジェクトにはファイル 拡張子 .sor が付けられ、オブジェクトを作成したアプリケーションのサブディレクトリに保存されます。 • サーバーサイド共有オブジェクトは、(アプリケーションインスタンスの期間だけ)非永続的に存在することも、(ア プリケーションの終了後にサーバー上に保存されて)永続的に存在することも可能です。 • 永続的な共有オブジェクトを作成するには、SharedObject.get() メソッドの persistence パラメータを、true に設定しま す。永続的な共有オブジェクトでは、アプリケーションの状態を維持することができます。 3 すべてのリモート共有オブジェクトは一意の名前で識別され、他の ActionScript オブジェクトと同様に、「プロパティ」 と呼ばれる、名前と値のペアのリストを格納します。名前は固有の文字列でなければならず、値は任意の ActionScript データ型にすることができます。 注意:クライアントサイドの共有オブジェクトとは異なり、サーバーサイドの共有オブジェクトには data プロパティは ありません。 • サーバーサイドの共有オブジェクトのプロパティ値を取得するには、SharedObject.getProperty() を呼び出します。 サーバーサイドの共有オブジェクトのプロパティ値を設定するには、SharedObject.setProperty() を呼び出します。 • 共有オブジェクトを消去するには、SharedObject.clear() メソッドを呼び出します。複数の共有オブジェクトを削除す るには、application.clearSharedObjects() メソッドを呼び出します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 87 サーバーサイド ActionScript リファレンスガイド • 現在のアプリケーションインスタンスも、別のアプリケーションインスタンスも、サーバーサイド共有オブジェクト を所有できます。別のアプリケーションインスタンスは、同じサーバーに置くことも、別のサーバーに置くこともで きます。別のアプリケーションインスタンスが所有している共有オブジェクトへの参照を「プロキシ化された共有オ ブジェクト」と呼びます。 複数のプロパティを修正するサーバーサイドスクリプトを作成した場合は、オブジェクトを更新する前に SharedObject.lock() メソッドを呼び出すことにより、更新中に他のクライアントがそのオブジェクトを修正するのを防ぐ ことができます。更新後、SharedObject.unlock() を呼び出して変更をコミットすると、別の変更を実行できるようになり ます。lock() メソッドおよび unlock() メソッド内のグループに change イベントを配信するには、SharedObject.mark() を 呼び出します。 プロキシ化された共有オブジェクトへの参照を取得すると、そのオブジェクトに加えられたすべての変更が、そのオブ ジェクトを所有するインスタンスに送信されます。SharedObject.onSync() イベントハンドラが定義されている場合は、変 更が成功したか失敗したかが、このハンドラによって送信されます。 また、プロキシ化された共有オブジェクトをロックまたはロック解除するために、SharedObject.lock() メソッドおよび SharedObject.unlock() メソッドを使用することはできません。 使用できるバージョン Flash Communication Server 1 プロパティ一覧 プロパティ 説明 SharedObject.autoCommit サーバーが定期的にすべての永続共有オブジェクトを格納するか(true)、そうでないか(false)を示す ブール値。 SharedObject.isDirty 読み取り専用。永続共有オブジェクトが最後に格納されてから、修正が加えられたか(true)、そうでない か(false)を示すブール値。 SharedObject.name 読み取り専用。共有オブジェクトの名前。 SharedObject.resyncDepth 共有オブジェクトの削除済みの値をいつ完全に削除するかを示す整数。 SharedObject.version 読み取り専用。共有オブジェクトの現在のバージョン番号。 メソッド一覧 メソッド SharedObject.clear() 説明 1 つの共有オブジェクトのすべてのプロパティを削除し、永続共有オブジェクトに接続しているす べてのクライアントに clear イベントを送信します。 SharedObject.close() SharedObject.commit() 共有オブジェクトから参照を切り離します。 静的。特定の永続共有オブジェクトのインスタンス、または値が true である isDirty プロパティを 持つすべての永続共有オブジェクトのインスタンスを格納します。 SharedObject.flush() 永続共有オブジェクトの現在の状態を保存します。 SharedObject.get() 静的。共有オブジェクトを作成するか、または既存の共有オブジェクトへの参照を返します。 SharedObject.getProperty() 共有オブジェクトにある名前付きプロパティの値を取得します。 SharedObject.getPropertyNames() 指定の共有オブジェクトのすべてのプロパティの名前を列挙します。 SharedObject.lock() 共有オブジェクトをロックします。 SharedObject.mark() すべての変更イベントを 1 つのメッセージとして、サブスクライブしているクライアントに配信 します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 88 サーバーサイド ActionScript リファレンスガイド メソッド 説明 SharedObject.purge() 指定されたバージョンより古い削除済みプロパティをすべて、サーバーから完全に削除します。 SharedObject.send() クライアントサイドスクリプトにあるメソッドを実行します。 SharedObject.setProperty() 共有オブジェクトにあるプロパティの名前を更新します。 SharedObject.size() 共有オブジェクトにある、有効なプロパティの合計数を返します。 SharedObject.unlock() 他のクライアントが共有オブジェクトを更新することを許可します。 イベントハンドラ一覧 イベントハンドラ SharedObject.handlerName() 説明 共有オブジェクトがクライアントサイドの SharedObject.send() メソッドから同じ名前のメッセージを 受信したときに呼び出されるイベントハンドラ。 SharedObject.onStatus() 共有オブジェクトのローカルインスタンスまたは永続共有オブジェクトに関連するエラー、警告および ステータスメッセージが発生したときに呼び出されます。 SharedObject.onSync() 共有オブジェクトが変更されると、呼び出されます。 SharedObject.autoCommit so.autoCommit サーバーが定期的にすべての永続共有オブジェクトを格納するか(true)、そうでないか(false)を示すブール値。 autoCommit が false である場合、アプリケーションは SharedObject.commit() を呼び出して、共有オブジェクトを保存する必 要があります。保存しないと、データは失われます。 このプロパティはデフォルトでは true に設定されています。デフォルト設定を上書きするには、次の例で示すように、 Application.xml ファイルの以下の設定キーを使用して初期状態を指定します。 false 使用できるバージョン Flash Media Server 2 SharedObject.clear() so.clear() 1 つの共有オブジェクトのすべてのプロパティを削除し、永続共有オブジェクトに接続しているすべてのクライアントに clear イベントを送信します。永続データオブジェクトも、永続共有オブジェクトから削除されます。 使用できるバージョン Flash Communication Server 1 戻り値 成功の場合は true、失敗の場合は false を返します。 関連項目 application.clearSharedObjects() FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 89 サーバーサイド ActionScript リファレンスガイド SharedObject.close() so.close() 共有オブジェクトから参照を切り離します。SharedObject.get() メソッドを呼び出すと、共有オブジェクトのインスタンスへ の参照が返されます。この参照は、参照を保持する変数が不要になり、スクリプトが " ガベージコレクション " になるまで 有効です。参照をただちに廃棄するには、SharedObject.close() を呼び出します。共有オブジェクトのプロキシ化が不要に なった場合も、SharedObject.close() を使用できます。 使用できるバージョン Flash Communication Server 1 例 次の例では、so が、共有オブジェクト foo への参照として割り当てられています。so.close() を呼び出すことによって、次の ように参照 so を共有オブジェクト foo から切り離します。 so = SharedObject.get("foo"); // Insert code here. so.close(); 関連項目 SharedObject.get() SharedObject.commit() so.commit([name]) 静的。特定の永続共有オブジェクトのインスタンス、または値が true である isDirty プロパティを持つすべての永続共有オブ ジェクトのインスタンスを格納します。SharedObject.autoCommit プロパティが false で、共有オブジェクトがローカルに格 納されるときに管理する必要がある場合に、このメソッドを使用します。 使用できるバージョン Flash Media Server 2 パラメータ name 格納する永続共有オブジェクトのインスタンス名を示す文字列。名前が指定されていない場合や空の文字列が渡され た場合は、すべての永続共有オブジェクトが格納されます。このパラメータはオプションです。 戻り値 成功(true)または失敗(false)を示すブール値。 例 次のコードでは、アプリケーションの停止時に、すべてのダーティな共有オブジェクトをローカルストレージにコミットし ます。 application.onAppStop = function (info){ // Insert code here. SharedObject.commit(); } SharedObject.flush() so.flush() FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 90 サーバーサイド ActionScript リファレンスガイド 永続共有オブジェクトの現在の状態を保存します。SharedObject.onStatus() ハンドラを呼び出し、呼び出しの成功または失敗 に関する情報を含むオブジェクトを渡します。 使用できるバージョン Flash Communication Server 1 戻り値 成功した場合はブール値 true、失敗した場合は false。 例 次の例では、まず、共有オブジェクト foo への参照を変数 so 内に配置します。次に、共有オブジェクトのインスタンスを ロックして、誰も変更できないようにし、so.flush() を呼び出して共有オブジェクトを保存します。最後に、保存した共有オ ブジェクトのロックを解除し、変更可能にします。 var so = SharedObject.get("foo", true); so.lock(); // Insert code here that operates on the shared object. so.flush(); so.unlock(); SharedObject.get() SharedObject.get(name, persistence [, netConnection]) 静的。共有オブジェクトを作成するか、または既存の共有オブジェクトへの参照を返します。共有オブジェクトに対して何 らかの操作を実行するためには、サーバーサイドスクリプトで SharedObject.get() メソッドを使用して、共有オブジェクトへ の参照を取得する必要があります。要求されたオブジェクトが見つからない場合は、新しいインスタンスが作成されます。 使用できるバージョン Flash Communication Server 1 パラメータ name 返される共有オブジェクトのインスタンスの名前。 persistence ブール値。永続共有オブジェクトの場合は true、非永続共有オブジェクトの場合は false。値が指定されない場 合のデフォルト値は false です。 netConnection アプリケーションインスタンスへの接続を表す NetConnection オブジェクト。このパラメータを渡すこと により、別のサーバーにある共有オブジェクトへの参照や、別のアプリケーションインスタンスが所有する共有オブジェク トへの参照を取得できます。name パラメータで指定された共有オブジェクトに関するすべての更新通知がこのインスタンス にプロキシ化され、永続共有オブジェクトが変更されたときに、リモートインスタンスがローカルインスタンスに通知しま す。netConnection パラメータとして使用される NetConnection オブジェクトは、SharedObject.get() 呼び出しの際、接続さ れた状態である必要はありません。サーバーは、NetConnection が接続された状態になったときに、リモート共有オブ ジェクトに接続します。このパラメータはオプションです。 戻り値 SharedObject クラスのインスタンスへの参照。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 91 サーバーサイド ActionScript リファレンスガイド 詳細 共有オブジェクトには永続と非永続の 2 種類があり、それらは別々のネームスペースを所有します。つまり、永続共有オブ ジェクトと非永続共有オブジェクトは、同じ名前を持つことができ、別個の共有オブジェクトとして存在することができま す。共有オブジェクトは、アプリケーションインスタンスのネームスペースにスコープされ、文字列名で識別されます。共 有オブジェクトの名前は、URI 仕様に準拠している必要があります。 SharedObject.get() SharedObject.get を呼び出して、別のアプリケーションインスタンスのネームスペースにある共有オブ ジェクトへの参照を取得することもできます。このインスタンスは、共有オブジェクトと同じサーバー上にも、別のサー バー上にも存在でき、プロキシ化された共有オブジェクトと呼ばれます。共有オブジェクトへの参照を別のインスタンスか ら取得するには、NetConnection オブジェクトを作成し、NetConnection.connect() メソッドを使用して、その共有オブ ジェクトを所有するアプリケーションインスタンスに接続します。次に、NetConnection オブジェクトを、 SharedObject.get() メソッドの netConnection パラメータとして渡します。サーバーサイドスクリプトでは、共有オブジェク トに対する要求がクライアントから出される前に、プロキシ化された共有オブジェクトへの参照を取得する必要があります。 これを実行するには、application.onAppStart() ハンドラ内で SharedObject.get() を呼び出します。 SharedObject.get() を netConnection パラメータ付きで呼び出す場合、同じ名前の共有オブジェクトがすでにローカルアプリ ケーションインスタンスに存在していると、その共有オブジェクトは、プロキシ化された共有オブジェクトに変換されます。 プロキシ化された共有オブジェクトに接続しているクライアントに対する共有オブジェクトメッセージはすべて、マスター インスタンスに送信されます。 netConnection パラメータとして使用されていた NetConnection オブジェクトの接続状態が接続から切断に変化すると、プ ロキシ化された共有オブジェクトはアイドルに設定され、加入者から受信したすべてのメッセージが破棄されます。接続が 失われると、NetConnection.onStatus() ハンドラが呼び出されます。その後、リモートインスタンスへの接続を再確立し、 SharedObject.get() を呼び出すことができます。このとき、プロキシ化された共有オブジェクトは、アイドル状態から接続さ れた状態に戻ります。 すでに接続している、プロキシ化された共有オブジェクトに対し、新しい NetConnection オブジェクトで SharedObject.get() を呼び出した場合で、かつ、その新しい NetConnection オブジェクトの URI が現在の NetConnection オブジェクトと一致しない場合、プロキシ化された共有オブジェクトは、それまでの共有オブジェクトへのサブスクライブ を解除し、すべての加入者に clear イベントを送信し、新しい共有オブジェクトインスタンスにサブスクライブします。プロ キシ化された共有オブジェクトへのサブスクライブ操作が成功すると、すべての加入者が新しい状態に再初期化されます。 このような処理により、クライアントの接続を切断することなく、共有オブジェクトを 1 つのアプリケーションインスタン スから別のアプリケーションインスタンスに移行することが可能になります。 プロキシ化された共有オブジェクトが加入者から受信した更新では、プロキシ化された共有オブジェクトのバージョンと加 入者のバージョンの現在の状態に基づいて、その更新を拒否できるかどうかがチェックされます。更新を拒否できる場合、 プロキシ化された共有オブジェクトは、そのメッセージをリモートインスタンスに転送せず、拒否メッセージを加入者に送 信します。 これに対応するクライアントサイド ActionScript メソッドは SharedObject.getRemote() です。 例 次の例では、関数 onProcessCmd() の内部に foo という共有オブジェクトを作成します。この関数に渡されるパラメータ cmd は、共有オブジェクトのプロパティに割り当てられます。 function onProcessCmd(cmd){ // Insert code here. var shObj = SharedObject.get("foo", true); propName = cmd.name; shObj.getProperty (propName, cmd.newAddress); } 次の例では、プロキシ化された共有オブジェクトを使用します。プロキシ化された共有オブジェクトが存在するサーバーま たはアプリケーションインスタンス(master)は、クライアントが接続するサーバーまたはアプリケーションインスタンス (proxy)と異なります。クライアントがプロキシに接続してリモート共有オブジェクトを取得すると、プロキシはマスター に接続して、この共有オブジェクトへの参照をクライアントに与えます。次のコードは、main.asc ファイルにあります。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 92 サーバーサイド ActionScript リファレンスガイド application.appStart = function() { nc = new NetConnection(); nc.connect("rtmp://" + master_server + "/" + master_instance); proxySO = SharedObject.get("myProxy",true,nc); // Now, whenever the client asks for a persistent // shared object called myProxy, it receives themyProxy // shared object from master_server/master_instance. }; SharedObject.getProperty() so.getProperty(name) 共有オブジェクトにある名前付きプロパティの値を取得します。戻り値は、プロパティに関連付けられたコピーであり、戻 り値を変更しても、共有オブジェクトは更新されません。プロパティを更新するには、SharedObject.setProperty() メソッ ドを使用します。 使用できるバージョン Flash Communication Server 1 パラメータ name 共有オブジェクト内のプロパティ名を示す文字列。 戻り値 SharedObject プロパティの値。プロパティが存在しない場合は、null が返されます。 例 次の例では、user 共有オブジェクト上の name プロパティの値を取得して、firstName 変数に割り当てます。 firstName = user.getProperty("name"); 関連項目 SharedObject.setProperty() SharedObject.getPropertyNames() so.getPropertyNames() 指定の共有オブジェクトのすべてのプロパティの名前を列挙します。 使用できるバージョン Flash Communication Server 1 戻り値 共有オブジェクトのすべてのプロパティ名を格納する文字列の配列。 例 次の例では、まず、myInfo 共有オブジェクトで getPropertyNames() を呼び出し、その名前を names 変数内に配置します。次 に、それらのプロパティ名を for ループで列挙します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 93 サーバーサイド ActionScript リファレンスガイド myInfo = SharedObject.get("foo"); var addr = myInfo.getProperty("address"); myInfo.setProperty("city", "San Francisco"); var names = myInfo.getPropertyNames(); for (x in names){ var propVal = myInfo.getProperty(names[x]); trace("Value of property " + names[x] + " = " + propVal); } SharedObject.handlerName() so.handlerName = function([p1,..., pN]){} 共有オブジェクトがクライアントサイドの SharedObject.send() メソッドから同じ名前のメッセージを受信したときに呼び出 されるイベントハンドラ。関数オブジェクトを定義し、その関数オブジェクトをイベントハンドラに割り当てる必要があり ます。 関数の本体で使用されている this キーワードは、SharedObject.get() で返される共有オブジェクトのインスタンスに設定され ます。 サーバーが特定のメッセージを受信しないようにする場合は、このハンドラを定義しないでください。 使用できるバージョン Flash Communication Server 1 パラメータ p1, ..., pN メッセージにユーザー定義パラメータが含まれる場合にハンドラメソッドに渡されるオプションのパラメータ。こ れらのパラメータは、SharedObject.send() メソッドに渡されるユーザー定義オブジェクトです。 戻り値 サーバーに無視される戻り値。 例 次の例では、traceArgs というイベントハンドラを定義します。 var so = SharedObject.get("userList", false); so.traceArgs = function(msg1, msg2){ trace(msg1 + " : " + msg2); }; SharedObject.isDirty so.isDirty 読み取り専用。永続共有オブジェクトが最後に格納されてから、修正が加えられたか(true)、そうでないか(false)を示す ブール値。SharedObject.commit() メソッドは、true である isDirty プロパティを持つ共有オブジェクトを格納します。 このプロパティは、非永続共有オブジェクトでは常に false です。 使用できるバージョン Flash Media Server 2 例 次の例では、so 共有オブジェクトが変更されている場合、そのオブジェクトを保存します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 94 サーバーサイド ActionScript リファレンスガイド var so = SharedObject.get("foo", true); if (so.isDirty){ SharedObject.commit(so.name); } SharedObject.lock() so.lock() 共有オブジェクトをロックします。これにより、サーバーサイドスクリプトから共有オブジェクトへの排他アクセスが可能 になります。SharedObject.unlock() メソッドが呼び出されると、すべての変更がバッチ処理され、この共有オブジェクトに サブスクライブしているすべてのクライアントに SharedObject.onSync() ハンドラを介して 1 件の更新メッセージが送信され ます。SharedObject.lock() メソッドと SharedObject.unlock() メソッドをネストする場合は、すべての lock() メソッドに対して それぞれ unlock() メソッドがあるようにします。これを行わないと、クライアントによる共有オブジェクトへのアクセスが ブロックされます。 プロキシ化された共有オブジェクトには、SharedObject.lock() メソッドを使用できません。 使用できるバージョン Flash Communication Server 1 戻り値 ロックカウントを示す整数。0 以上の数は成功を、-1 は失敗を表します。プロキシ化された共有オブジェクトの場合は、常 に -1 を返します。 例 次の例では、so 共有オブジェクトをロックし、挿入されるコードを実行した後にロック解除します。 var so = SharedObject.get("foo"); so.lock(); // Insert code here that operates on the shared object. so.unlock(); SharedObject.mark() so.mark(handlerName, p1, ..., pN) すべての change イベントを 1 つのメッセージとして、サブスクライブしているクライアントに配信します。 サーバーサイドスクリプトでは、SharedObject.setProperty() メソッドを呼び出すことにより、lock() メソッドと unlock() メ ソッドへの呼び出しの間に共有オブジェクトの複数のプロパティを更新できます。接続しているすべてのクライアントは、 SharedObject.onSync() ハンドラを通じて change イベント通知を受信します。ただし、帯域幅を最適化するためにサーバーが 複数のメッセージを折りたたむ場合があるため、change イベント通知が送信される順序がコードの場合とは異なることがあ ります。 セット内のすべてのプロパティが更新された後で、コードを実行するには、mark() メソッドを使用します。mark() の呼び出 しが更新される前にすべてのプロパティが変化するということを理解して、mark() メソッドに渡される handlerName パラ メータを呼び出せます。 使用できるバージョン Flash Media Server 2 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 95 サーバーサイド ActionScript リファレンスガイド パラメータ handlerName クライアントサイドの SharedObject インスタンスで、指定されたハンドラを呼び出します。例えば、 handlerName パラメータが onChange である場合、クライアントはすべての p1, ...,pN パラメータで SharedObject.onChange() ハンドラを呼び出します。 注意:ビルトインメソッドの名前をハンドラ名に使用しないでください。例えば、ハンドラ名が close である場合、接続して いるストリームは閉じられます。 p1, ..., pN 他の ActionScript オブジェクトへの参照を含む、任意の ActionScript 型のパラメータ。パラメータは、クライ アントで実行されたときに handlerName に渡されます。 戻り値 ブール値。クライアントにメッセージを送信可能な場合は true を返します。それ以外の場合は false を返します。 例 次の例では、mark() メソッドを 2 度呼び出して、クライアント用に共有オブジェクトのプロパティの更新を 2 セット作成し ます。 var myShared = SharedObject.get("foo", true); myShared.lock(); myShared.setProperty("name", "Stephen"); myShared.setProperty("address", "Xyz lane"); myShared.setProperty("city", "SF"); myShared.mark("onAdrChange", "name"); myShared.setProperty("account", 12345); myShared.mark("onActChange"); myShared.unlock(); 次の例は、受信するクライアントサイドスクリプトを示しています。 connection = new NetConnection(); connection.connect("rtmp://flashmediaserver/someApp"); var x = SharedObject.get( "foo", connection.uri, true); x.connect(connection); x.onAdrChange = function(str) { // Shared object has been updated, // can look at the "name", "address" and "city" now. } x.onActChange = function(str) { // Shared object has been updated, // can look at the "account" property now, } SharedObject.name so.name 読み取り専用。共有オブジェクトの名前。 使用できるバージョン Flash Communication Server 1 SharedObject.onStatus() so.onStatus = function(info) {} FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 96 サーバーサイド ActionScript リファレンスガイド 共有オブジェクトのローカルインスタンスまたは永続共有オブジェクトに関連するエラー、警告およびステータスメッセー ジが発生したときに呼び出されます。 使用できるバージョン Flash Communication Server 1 パラメータ info 情報オブジェクト。 例 次のクライアントサイドコードは、指定した共有オブジェクトの level および code プロパティをトレースする匿名関数を定 義します。 so = SharedObject.get("foo", true); so.onStatus = function(infoObj){ //Handle status messages passed in infoObj. trace(infoObj.level + "; " + infoObj.code); }; SharedObject.onSync() so.onSync = function(list){} 共有オブジェクトが変更されると、呼び出されます。加入者が共有オブジェクトに対して実行した変更を処理する関数を定 義するには、onSync() ハンドラを使用します。 また、サーバーおよび他の加入者がプロキシ化された共有オブジェクトに対して実行した変更のステータスを取得する場合 も、この関数を定義します。 注意:サーバーサイド ActionScript の SharedObject クラスの prototype プロパティには、onSync() ハンドラを定義するこ とはできません。 使用できるバージョン Flash Communication Server 1 パラメータ list onSync() ハンドラが最後に呼び出されてから変更された、共有オブジェクトのプロパティに関する情報を格納するオブ ジェクトの配列。プロキシ化された共有オブジェクトに対する通知は、ローカルアプリケーションインスタンスが所有する 共有オブジェクトに対する通知と異なります。次の表は、ローカル共有オブジェクトのコードを示しています。 ローカルコード 説明 change 加入者がプロパティを変更しました。 delete 加入者がプロパティを削除しました。 name 変更または削除されたプロパティの名前 oldValue プロパティの古い値。これは change メッセージと delete メッセージの両方で有効ですが、クライアントでは、 oldValue は delete に対しては設定されません。 注意:サーバーサイドで SharedObject.setProperty() メソッドを使用して行う、プロパティの変更および削除は必ず成功する ので、これらの変更は通知されません。 次の表は、ローカル共有オブジェクトのコードを示しています。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 97 サーバーサイド ActionScript リファレンスガイド プロキシ化されたコード 説明 success 共有オブジェクトのサーバーでの変更が受諾されました。 reject 共有オブジェクトのサーバーでの変更が拒否されました。リモートインスタンスにある値は変更されていませんでし た。 change 別の加入者がプロパティを変更しました。 delete プロパティが削除されました。この通知は、サーバーが共有オブジェクトを削除した場合、または別の加入者がプロ パティを削除した場合に発生する可能性があります。 clear 共有オブジェクトのすべてのプロパティが削除されます。これが発生する可能性があるのは、サーバーの共有オブ ジェクトがマスター共有オブジェクトと同期していない場合、または永続共有オブジェクトが 1 つのインスタンスか ら別のインスタンスに移行した場合です。通常、このイベントの後には、サーバーの共有オブジェクトの全プロパ ティを復元する change メッセージが続きます。 name 変更または削除されたプロパティの名前 oldValue プロパティの古い値。これは、reject、change、delete の各コードについてのみ有効です。 注意:共有オブジェクトとサーバーの同期が正常に行われると、SharedObject.onSync() ハンドラが呼び出されます。共有オ ブジェクトに変更が加えられていない場合は、リストオブジェクトが空の場合があります。 例 次の例では、共有オブジェクト so のプロパティが変更されるたびに呼び出される関数を作成します。 // Create a new NetConnection object. nc = new NetConnection(); nc.connect("rtmp://server1.xyx.com/myApp"); // Create the shared object. so = SharedObject.get("MasterUserList", true, nc); // The list parameter is an array of objects containing information // about successfully or unsuccessfully changed properties // from the last time onSync() was called. so.onSync = function(list) { for (var i = 0; i < list.length; i++) { switch (list[i].code ) { case "success": trace ("success"); break; case "change": trace ("change"); break; case "reject": trace ("reject"); break; case "delete": trace ("delete"); break; case "clear": trace ("clear"); break; } } }; SharedObject.purge() so.purge(version) FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 98 サーバーサイド ActionScript リファレンスガイド 指定されたバージョンより古い削除済みプロパティをすべて、サーバーから削除します。SharedObject.resyncDepth プロパ ティを設定することでも同じ効果が得られますが、purge() メソッドでは、どのプロパティを削除するかをスクリプトでより 詳細に制御できます。 使用できるバージョン Flash Communication Server 1 パラメータ version バージョンを示す数字。このバージョンより古い削除済みデータがすべて完全に削除されます。 戻り値 ブール値。 例 次の例では、so.version - 3 の値より古いバージョンの so 共有オブジェクトのプロパティをすべて削除します。 var so = SharedObject.get("foo", true); so.lock(); so.purge(so.version - 3); so.unlock(); SharedObject.resyncDepth so.resyncDepth 共有オブジェクトの削除済みのプロパティを恒久的に削除するかを示す整数。サーバーサイドスクリプトでこのプロパティ を使用して、共有オブジェクトの再同期および共有オブジェクトを削除するタイミングの制御を行うことができます。デ フォルト値は無限大です。 共有オブジェクトの現在のリビジョン番号から削除済みプロパティのリビジョン番号を引いた結果が SharedObject.resyncDepth の値より大きい場合、そのプロパティは削除されます。また、この共有オブジェクトに接続して いるクライアントのクライアントリビジョン番号を SharedObject.resyncDepth の値に加えた結果が、サーバーの現在のリビ ジョン番号より小さい場合は、クライアント共有オブジェクトの現在のエレメントがすべて削除されます。そして、有効な プロパティがクライアントに送信され、クライアントは "clear" メッセージを受信します。 このメソッドは、追加または削除するプロパティが多数ある場合に、クライアントに送信するメッセージ数があまり多くな らないようにするために有効です。例えば、あるクライアントが共有オブジェクトに接続していて、12 個のプロパティを共 有していたとします。その後、そのクライアントは接続を切断し、共有オブジェクトに接続している別の複数のクライアン トが、20 個のプロパティを削除し、10 個のプロパティを追加しました。その後、最初のクライアントが再接続すると、そ のクライアントは、例えば、共有していたプロパティの削除メッセージを 10 件と、プロパティの変更メッセージを 2 件受信 する可能性があります。この場合、SharedObject.resyncDepth プロパティを使用すると、クライアントに送信するメッセージ を、1 件の "clear" メッセージとそれに続く 2 件のプロパティ変更メッセージだけにすることができます。 使用できるバージョン Flash Communication Server 1 例 次の例では、リビジョン番号の差が 10 を超える場合に、共有オブジェクト so を再同期します。 so = SharedObject.get("foo"); so.resyncDepth = 10; FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 99 サーバーサイド ActionScript リファレンスガイド SharedObject.send() so.send(methodName, [p1, ..., pN]) クライアントサイドスクリプトにあるメソッドを実行します。SharedObject.send() を使用すると、ある共有オブジェクトに サブスクライブしているすべての Flash クライアントに対して、1 つのメソッドを非同期に実行できます。サーバーは、こ のメッセージに応答する成功、失敗、または戻り値に関する通知をクライアントからまったく受信しません。 使用できるバージョン Flash Communication Server 1 パラメータ methodName クライアントサイドの共有オブジェクトにあるメソッドの名前を示す文字列。例えば、"doSomething" が指定 された場合、クライアントは SharedObject.doSomething() メソッドを、p1, ..., pN パラメータをすべて付けて呼び出す必要が あります。 p1, ..., pN 他のオブジェクトへの参照を含む、任意のパラメータ。これらのパラメータは、クライアント上の指定された methodName に渡されます。 戻り値 メッセージがクライアントに送信された場合はブール値 true、送信されない場合は false。 例 次の例では、SharedObject.send() メソッドを呼び出して、クライアントにある doSomething() メソッドを実行し、文字列 "This is a test" を渡します。 var so = SharedObject.get("foo", true); so.send("doSomething", "This is a test"); 次の例は、doSomething() メソッドを定義するクライアントサイド ActionScript コードです。 nc = new NetConnection(); nc.connect("rtmp://www.adobe.com/someApp"); var so = SharedObject.getRemote("foo", nc.uri, true); so.connect(nc); so.doSomething = function(str) { // Process the str object. }; SharedObject.setProperty() so.setProperty(name, value) 共有オブジェクトにあるプロパティの名前を更新します。 サーバーサイドの name パラメータは、クライアントサイドの data プロパティの属性と同じです。例えば、次の 2 つのコー ド行は等価です。1 行目はサーバーサイド ActionScript で、2 行目はクライアントサイド ActionScript です。 so.setProperty(nameVal, "foo"); clientSO.data[nameVal] = "foo"; 共有オブジェクトのプロパティは、クライアントが SharedObject.getProperty() を呼び出し、続けて SharedObject.setProperty() を呼び出す間に修正できます。トランザクションの完全性を保つためには、共有オブジェクトを 修正する前に SharedObject.lock() メソッドを呼び出します。この場合は、修正の完了後に SharedObject.unlock() を呼び出す 必要があります。SharedObject.lock() が呼び出されずに SharedObject.setProperty() が呼び出された場合、共有オブジェクト に変更が加えられ、SharedObject.setProperty() が戻る前に、そのオブジェクトにすべての加入者に対して変更の通知が行わ FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 100 サーバーサイド ActionScript リファレンスガイド れます。SharedObject.lock() メソッドが呼び出されてから SharedObject.setProperty() が呼び出された場合は、 SharedObject.unlock() メソッドが呼び出された時点ですべての変更がバッチ処理され、送信されます。クライアントサイド の SharedObject.onSync() ハンドラは、共有オブジェクトのローカルコピーが更新されるときに呼び出されます。 注意:1 つのソースだけ(クライアントまたはサーバー)がサーバーサイドスクリプトで共有オブジェクトを更新している 場合は、lock() メソッド、unlock() メソッドまたは onSync() ハンドラを使用する必要はありません。 使用できるバージョン Flash Communication Server 1 パラメータ name 共有オブジェクトにあるプロパティの名前。 value そのプロパティに関連付けられた ActionScript オブジェクト。null にすると、そのプロパティが削除されます。 例 次の例では、まず、SharedObject.setProperty() メソッドを使用して、値 San Francisco を持つプロパティ city を作成します。 次に、for ループですべてのプロパティ値を列挙し、trace() を呼び出して値を表示します。 myInfo = SharedObject.get("foo"); var addr = myInfo.getProperty("address"); myInfo.setProperty("city", "San Francisco"); var names = sharedInfo.getPropertyNames(); for (x in names){ var propVal = sharedInfo.getProperty(names[x]); trace("Value of property " + names[x] + " = " + propVal); } 関連項目 SharedObject.getProperty() SharedObject.size() so.size() 共有オブジェクトにある、有効なプロパティの合計数を返します。 使用できるバージョン Flash Communication Server 1 戻り値 プロパティの数を示す整数。 例 次の例では、共有オブジェクトのプロパティの数を取得し、その数を変数 len に割り当てます。 var so = SharedObject.get("foo", true); var soLength = so.size(); SharedObject.unlock() so.unlock() FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 101 サーバーサイド ActionScript リファレンスガイド 他のクライアントが共有オブジェクトを更新することを許可します。また、このメソッドは、SharedObject.lock() メソッド が呼び出された後に実行されたすべての変更をサーバーにコミットさせ、すべてのクライアントに更新メッセージを送信し ます。 プロキシ化された共有オブジェクトでは、SharedObject.unlock() メソッドを呼び出すことはできません。 使用できるバージョン Flash Communication Server 1 戻り値 ロックカウントを示す整数。0 以上の数は成功を、-1 は失敗を表します。プロキシ化された共有オブジェクトの場合は、常 に -1 を返します。 例 次の例では、共有オブジェクトをロック解除します。 var so = SharedObject.get("foo", true); so.lock(); // Insert code to manipulate the shared object. so.unlock(); 関連項目 SharedObject.lock() SharedObject.version so.version 読み取り専用。共有オブジェクトの現在のバージョン番号。クライアントまたはサーバーのいずれかで SharedObject.setProperty() メソッドを呼び出すと、version プロパティの値がインクリメントされます。 使用できるバージョン Flash Communication Server 1 SOAPCall クラス 使用できるバージョン Flash Media Server 2 SOAPCall クラスは、すべての Web サービス呼び出しから返されるオブジェクトタイプです。通常これらのオブジェクト は、Web Service Definition Language(WSDL)が解析されスタブが生成されると、自動的に作成されます。 プロパティ一覧 プロパティ 説明 SOAPCall.request 現在の SOAP(Simple Object Access Protocol)要求を表す XML オブジェクト。 SOAPCall.response 最新の SOAP 応答を表す XML オブジェクト。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 102 サーバーサイド ActionScript リファレンスガイド イベントハンドラ一覧 イベントハンドラ 説明 SOAPCall.onFault() メソッドが失敗し、エラーを返したときに呼び出されます。 SOAPCall.onResult() メソッドの呼び出しと戻りが成功し、戻ったときに呼び出されます。 SOAPCall.onFault() SOAPCall.onFault(fault) メソッドが失敗し、エラーを返したときに呼び出されます。 使用できるバージョン Flash Media Server 2 パラメータ fault fault パラメータは、XML SOAP Fault のオブジェクト版です(「SOAPCall クラス」を参照)。 SOAPCall.onResult() mySOAPCall.onResult(result){} メソッドの呼び出しと戻りが成功し、戻ったときに呼び出されます。 使用できるバージョン Flash Media Server 2 パラメータ result この操作で返された、復号化済みの ActionScript オブジェクト(ある場合)。復号化済みの結果ではなく生の XML を取得するには、SOAPCall.response プロパティにアクセスします。 SOAPCall.request mySOAPCall.request 現在の SOAP(Simple Object Access Protocol)要求を表す XML オブジェクト。 使用できるバージョン Flash Media Server 2 SOAPCall.response mySOAPCall.response 最新の SOAP 応答を表す XML オブジェクト。 使用できるバージョン Flash Media Server 2 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 103 サーバーサイド ActionScript リファレンスガイド SOAPFault クラス SOAPFault クラスは、WebService.onFault() および SOAPCall.onFault() 関数に返されたエラーオブジェクトのオブジェクト タイプです。このオブジェクトは失敗の結果として返されます。また、このオブジェクトは SOAP Fault XML 型の ActionScript マッピングです。 使用できるバージョン Flash Media Server 2 プロパティ一覧 プロパティ 説明 SOAPFault.detail スタックトレースや、Web サービスエンジンが返したその他の情報など、エラーに関するアプリケーション固 有の情報を示す文字列。 SOAPFault.faultactor 失敗の原因を示す文字列。 SOAPFault.faultcode エラーを説明する短い標準の修飾名を示す文字列。 SOAPFault.faultstring 人間が読んで理解できる形でエラーを説明する文字列。 SOAPFault.detail mySOAPFault.detail スタックトレースや、Web サービスエンジンが返したその他の情報など、エラーに関するアプリケーション固有の情報を示 す文字列。 使用できるバージョン Flash Media Server 2 SOAPFault.faultactor mySOAPFault.faultactor 失敗の原因を示す文字列。中間に何も介在しない場合、このプロパティは省略されることがあります。 使用できるバージョン Flash Media Server 2 SOAPFault.faultcode mySOAPFault.faultcode エラーを説明する短い標準の修飾名を示す文字列。 使用できるバージョン Flash Media Server 2 SOAPFault.faultstring mySOAPFault.faultstring FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 104 サーバーサイド ActionScript リファレンスガイド 人間が読んで理解できる形でエラーを説明する文字列。 使用できるバージョン Flash Media Server 2 例 次の例では、WSDL がロードに失敗すると、テキストフィールドに失敗コードを表示します。 // Load the WebServices class: load("webservices/WebServices.asc"); // Prepare the WSDL location: var wsdlURI = "http://www.flash-db.com/services/ws/companyInfo.wsdl"; // Instantiate the web service object by using the WSDL location: stockService = new WebService(wsdlURI); // Handle the WSDL parsing and web service instantiation event: stockService.onLoad = function(wsdl){ wsdlField.text = wsdl; } // If the wsdl fails to load, the onFault event is fired: stockService.onFault = function(fault){ wsdlField.text = fault.faultstring; } Stream クラス Stream クラスでは、アプリケーション内のストリームを管理または再パブリッシュすることができます。Stream オブジェ クトは、クライアントサイドの NetStream オブジェクトと同等のサーバーサイドオブジェクトです。 Stream オブジェクトにオーディオソースまたはビデオソースを割り当てることはできません。再生および管理できるのは 既存のストリームだけです。ストリームクラスは、再生リスト内の既存のストリームのシャッフル、他のサーバーからのス トリームの取り込み、ストリームに対するアクセスの制御などに使用します。クライアントがパブリッシュしたストリーム を記録し、ログファイルなどのデータストリームを記録することもできます。 ストリームは、Flash Player を実行しているクライアントと Flash Media Server を実行しているサーバー間の、単方向の接 続です。ストリームは、Flash Media Server を実行している 2 つのサーバー間を接続する場合もあります。サーバーサイド ActionScript では、Stream.get() を呼び出して、ストリームを作成できます。クライアントは複数のストリームに同時にアク セスできます。Stream オブジェクトは、数百個でも数千個でも同時にアクティブであることが可能です。FLV 形式および F4V 形式で記録できます。 ストリームには ActionScript データを含めることができます。ストリームにデータを追加するには、Stream.send() メソッ ドを呼び出します。ログファイルを作成する場合などには、ストリームをリアルタイムで再生する前にこのデータを抽出す ることができます。これは、ストリームにメタデータを追加する場合にも使用することができます。 使用できるバージョン Flash Communication Server 1 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 105 サーバーサイド ActionScript リファレンスガイド プロパティ一覧 プロパティ 説明 Stream.bufferTime 読み取り専用。ストリームを再生する前にバッファするメッセージの長さを秒数で示します。 Stream.maxQueueDelay 読み取り専用。ライブキューがメッセージの送信を遅延できる最大時間(ミリ秒)。 Stream.maxQueueSize 読み取り専用。ライブキューが、その中に存在するメッセージを送信するまでに増大できる最大サイズ(バイト 単位)。 Stream.name 読み取り専用。ライブストリームに関連付けられた固有の文字列を格納します。 Stream.publishQueryString 読み取り専用。ストリームがパブリッシュされたときにストリームパスで指定されたクエリ文字列。 Stream.syncWrite ストリームの記録時にストリームがバッファの内容をファイルに書き込むときの制御をするブール値。 Stream.time 読み取り専用。ストリームが再生された秒数。 メソッド一覧 メソッド 説明 Stream.clear() 記録されている ファイルをサーバーから削除します。 Stream.flush() ストリームを消去します。 Stream.get() 静的。Stream オブジェクトへの参照を返します。 Stream.getOnMetaData() 名前が付けられたストリームまたはビデオファイルのメタデータを含むオブジェクトを返します。 Stream.length() 静的。記録ストリームの長さを秒単位で返します。 Stream.play() オプションの開始時刻、継続時間および再生中のすべてのストリームを消去するリセットフラグを使用し て、ストリームのデータソースを制御します。 Stream.record() Stream オブジェクトを通過するすべてのデータを記録し、記録されたストリームのファイルを作成しま す。 Stream.send() クライアントサイド NetStream オブジェクトでリモートメソッドを呼び出します。 Stream.setBufferTime() メッセージキューの長さを設定します。 Stream.setVirtualPath() ビデオストリームを再生するための仮想ディレクトリパスを設定します。 Stream.size() 静的。記録ストリームのサイズをバイト単位で返します。 イベントハンドラ一覧 イベントハンドラ 説明 Stream.onStatus() Stream オブジェクトのステータスが変化するたびに呼び出されます。 Stream.bufferTime myStream.bufferTime 読み取り専用。ストリームを再生する前にバッファするメッセージの長さを秒数で示します。このプロパティは、リモート サーバーからストリームを再生する場合、または記録ストリームをローカルに再生する場合に限り適用されます。 bufferTime プロパティを設定するには、Stream.setBufferTime() を呼び出します。 メッセージは、Flash Media Server と Flash Player の間でやり取りされるデータです。データは、小さなパケット ( メッ セージ ) に分割されます。各メッセージには、オーディオ、ビデオ、またはデータといったタイプがあります。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 106 サーバーサイド ActionScript リファレンスガイド 使用できるバージョン Flash Communication Server 1 Stream.clear() myStream.clear() 記録済みの FLV または F4V ファイルをサーバーから削除します。 使用できるバージョン Flash Communication Server 1 戻り値 呼び出しが成功した場合はブール値 true、失敗した場合は false。 例 次の例では、playlist.flv という記録ストリームを削除します。この例では、ストリームを削除する前に、onStatus() ハンド ラを定義します。このハンドラは、NetStream.Clear.Success および NetStream.Clear.Failed の 2 つの情報オブジェクトエラー コードを使用して、ステータスメッセージをアプリケーションログファイルおよび Administration Console の Live Log パ ネルに送信します。 s = Stream.get("playlist"); if (s){ s.onStatus = function(info){ if(info.code == "NetStream.Clear.Success"){ trace("Stream cleared successfully."); } if(info.code == "NetStream.Clear.Failed"){ trace("Failed to clear stream."); } }; s.clear(); } Stream.flush() myStream.flush() ストリームを消去します。記録にストリームが使用されると、flush() メソッドはこのストリームに関連付けられているバッ ファの内容を記録ファイルに書き込みます。 データのみを含むストリーム上では、flush() を呼び出すことを強くお勧めします。データのほかにオーディオかビデオ、ま たはその両方を含むストリーム上で flush() を呼び出した場合、同期化の問題が発生する可能性があります。 使用できるバージョン Flash Media Server 2 戻り値 バッファが正常に消去された場合はブール値 true、それ以外の場合は false。 例 次の例では、myStream ストリームを消去します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 107 サーバーサイド ActionScript リファレンスガイド // Set up the server stream. application.videoStream = Stream.get("aVideo"); if (application.videoStream){ application.videoStream.record(); application.videoStream.send("test", "hello world"); application.videoStream.flush(); } Stream.get() Stream.get(name) 静的。Stream オブジェクトへの参照を返します。要求されたオブジェクトが見つからない場合は、新しいインスタンスが 作成されます。Stream.get() メソッドを呼び出した後、Stream.record() メソッドと Stream.play() メソッドを呼び出してスト リームをパブリッシュおよび記録できます。 ストリームは、FLV(デフォルト)形式または F4V 形式でパブリッシュおよび記録できます。形式は、Stream.get() メソッ ドに渡す name パラメータで決定します。FLV 形式でパブリッシュするには、ストリーム名だけを指定します。例えば、 Stream.get("footballGame") となります。F4V 形式でパブリッシュするには、次のようにストリーム名の前に mp4: を付けま す。オプションで、ファイル拡張子を指定できます。例えば、次のコードはすべて有効です。 Stream.get("mp4:footballGame.f4v") Stream.get("mp4:footballGame.mp4") Stream.get("mp4:footballGame") F4V ファイルの動作は、FLV ファイルと異なります。ファイル拡張子のあるファイルを作成するには、ファイル拡張子を 指定する必要があります。ファイル拡張子を指定しない場合、作成されるファイルにはファイル拡張子がありません。 ストリームを記録するには、Stream.get() を呼び出すときにその形式でストリームを作成します。例えば、ストリーム 「myHomeMovie.mp4」を記録する場合、次のようなコードを使用します。 s = Stream.get("mp4:streamName.mp4"); if(s){ s.record(); s.play("mp4:myHomeMovie.mp4"); } 既存のファイルの末尾にストリームを追加して再生リストを作成する場合、別の設定と形式のストリームを追加できます。 ファイルを FLV 形式で記録すると、On2 VP6 でエンコードされたストリームが記録され、H.264 でエンコードされたスト リームは無視されます。ファイルを F4V 形式で記録すると、FLV、MP3、MP4、F4V おゆよびライブストリームなど、ど の種類のコンテンツでもストリームに追加できます。 注意:Flash Media Server により記録された F4V ファイルを他のツールで再生したり編集するには、Adobe Flash Media Server F4V Post Processor ツールを使用します。ツールは、www.adobe.com/go/fms_tools から入手できます。 使用できるバージョン Flash Communication Server 1 パラメータ name Stream オブジェクトの名前を指定する文字列。 戻り値 呼び出しが成功した場合は Stream オブジェクト、失敗した場合は null。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 108 サーバーサイド ActionScript リファレンスガイド 例 次の例では、ビデオを F4V 形式でパブリッシュおよび記録します。ストリームには、2 つのビデオをが含まれており、1 つ は FLV 形式で、もう 1 つは MP4 形式です。 var s=Stream.get("mp4:streamName.f4v"); if(s) { s.record(); s.play("sample",-2,-1); s.play("mp4:sample_mp4.mp4",-2,-1,false); } Stream.getOnMetaData() Stream.getOnMetaData(name) 静的。名前が付けられたストリームまたはビデオファイルのメタデータを含むオブジェクトを返します。オブジェクトには、 メタデータの各アイテムにつき 1 つのプロパティが含まれています。Flash Video Exporter ユーティリティ(バージョン 1.1 以降)は、ビデオの継続時間、作成日付、データレート、その他の情報をビデオファイルに埋め込みます。 使用できるバージョン Flash Media Server 2 パラメータ name 記録されたストリームの名前を示す文字列(「myVideo」など)。FLV ファイルの場合は、ファイル拡張子または接頭 辞を付けずに名前を渡します(「myVideo」)。F4V ファイルの場合は、接頭辞 mp4 を付けて名前を渡します (「mp4:myVideo」)。F4V ファイルにファイル拡張子がある場合は、ファイル拡張子を付けます。 戻り値 プロパティとしてのメタデータを含むオブジェクト。 例 次の例では、記録されたストリームである myVideo.flv のメタデータのプロパティと値のリストを示します。 var infoObject = Stream.getOnMetaData("myVideo"); trace("Metadata for myVideo.flv:"); for(i in infoObject){ trace(i + " = " + infoObject[i]); } Stream.length() Stream.length(name[, virtualKey]) 静的。記録ファイルの長さを秒単位で返します。要求されたストリームが見つからない場合は、0 を返します。 使用できるバージョン Flash Communication Server 1 パラメータ name 記録されたストリームの名前を示す文字列。MP3 ファイルの長さを取得するには、ファイル名の前に mp3: を置きま す(例:「mp3:beethoven」)。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 109 サーバーサイド ActionScript リファレンスガイド virtualKey キーの値を示す文字列。Flash Media Server 2 以降では、ストリーム名は必ずしも一意ではありません。同じ名 前で複数のストリームを作成して、異なる物理ディレクトリに配置することもできます。次に Vhost.xml ファイルの VirtualDirectory セクションと VirtualKeys セクションを使用して、適切なストリームにクライアントをダイレクトします。 Stream.length() メソッドはクライアントに関連付けられていませんが、サーバー上のストリームに接続されます。そのため、 正しいストリームを特定するには、仮想キーを指定する必要があります。キーについての詳細は、「Client.virtualKey」を参 照してください。このパラメータはオプションです。 戻り値 数値。 例 次の例では、記録ストリームファイル myVideo の長さを取得し、それを変数 streamLen に割り当てます。 function onProcessCmd(cmd){ var streamLen = Stream.length("myVideo"); trace("Length: " + streamLen + "\n"); } 次の例では、MP3 ファイル beethoven.mp3 の長さを取得し、それを変数 streamLen に割り当てます。 function onProcessCmd(cmd){ var streamLen = Stream.length("mp3:beethoven"); trace("Length: " + streamLen + "\n"); } 次の例では、MP4 ファイル beethoven.mp4 の長さを取得し、それを変数 streamLen に割り当てます。 function onProcessCmd(cmd){ var streamLen = Stream.length("mp4:beethoven"); trace("Length: " + streamLen + "\n"); } Stream.maxQueueDelay myStream.maxQueueDelay ライブキューがメッセージの送信を遅延できる最大時間(ミリ秒)。 使用できるバージョン Flash Media Server 3.5 例 例えば、Stream.publishQueryString プロパティを参照してください。 関連項目 Stream.maxQueueSize、Stream.publishQueryString Stream.maxQueueSize myStream.maxQueueSize ライブキューが、その中に存在するメッセージを送信するまでに増大できる最大サイズ(バイト単位)。 使用できるバージョン Flash Media Server 3.5 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 110 サーバーサイド ActionScript リファレンスガイド 例 例えば、Stream.publishQueryString プロパティを参照してください。 関連項目 Stream.maxQueueDelay、Stream.publishQueryString Stream.name myStream.name 読み取り専用。ライブストリームに関連付けられた固有の文字列を格納します。このプロパティをインデックスとして使用 して、アプリケーション内でストリームを検索することができます。 使用できるバージョン Flash Communication Server 1 例 次の関数はパラメータとして Stream オブジェクトをとり、ストリームの名前を返します。 function getStreamName(myStream){ return myStream.name; } Stream.onStatus() myStream.onStatus = function([infoObject]) {} Stream オブジェクトのステータスが変化するたびに呼び出されます。例えば、ストリーム内のファイルを再生すると、 Stream.onStatus() が呼び出されます。Stream.onStatus() を使用すると、再生の開始と終了の時刻、記録の開始時刻などを確 認できます。 使用できるバージョン Flash Communication Server 1 パラメータ infoObject ストリームに関する情報を含む code プロパティと level プロパティを持つオブジェクト。このパラメータはオプ ションですが、通常は使用されます。Stream 情報オブジェクトには、次のプロパティが含まれています。 プロパティ 説明 code 発生したイベントを識別する文字列。 description コードに関する詳細情報。このプロパティが含まれない情報オブジェクトもあります。 details ストリームの名前。 level イベントの重大度を示す文字列。 次の表は、code プロパティと level プロパティの値を示しています。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 111 サーバーサイド ActionScript リファレンスガイド Code プロパティ Level プロパティ NetStream.Clear.Failed error 説明 application.clearStreams() の呼び出しが、ストリームの削除に失敗し ました。 NetStream.Clear.Success status application.clearStreams() の呼び出しにより、ストリームが正常に削 除されました。 NetStream.Failed error Stream メソッドを使用する試行が失敗しました。 NetStream.Play.Failed error Stream.play() の呼び出しが失敗しました。 NetStream.Play.InsufficientBW warning データが通常速度より低速で再生されています。 NetStream.Play.Start status 再生が開始されました。 NetStream.Play.StreamNotFound error 存在しないストリームを再生しようとしました。 NetStream.Play.Stop status 再生が停止されました。 NetStream.Play.Reset status 再生リストがリセットされました。 NetStream.Play.PublishNotify status ストリームへの初期パブリッシュ操作が正常に行われました。このメッ セージはすべての加入者に送信されます。 NetStream.Play.UnpublishNotify status ストリームからのパブリッシュ解除操作が正常に行われました。この メッセージはすべての加入者に送信されます。 NetStream.Publish.BadName error すでに別のユーザーによってパブリッシュされているストリームをパブ リッシュしようとしました。 NetStream.Publish.Start status パブリッシュが開始されました。 NetStream.Record.Failed error ストリームを記録する試行が失敗しました。 NetStream.Record.NoAccess error 読み取り専用ストリームを記録しようとしました。 NetStream.Record.Start status 記録が開始されました。 NetStream.Record.Stop status 記録が停止されました。 NetStream.Unpublish.Success status ストリームのパブリッシュが停止しました。 例 次のサーバーサイドコードは、特定のストリームの削除を試み、返されたコードをトレースします。 Client.prototype.delStream = function(streamName){ trace("*** deleting stream: " + streamName); s = Stream.get("streamName"); if (s) { s.onStatus = function(info){ if (info.code == "NetStream.Clear.Success"){ trace("*** Stream " + streamName + "deleted."); } if (info.code == "NetStream.Clear.Failure"){ trace("*** Failure to delete stream " + streamName); } }; s.clear(); } } Stream.play() myStream.play(streamName, [startTime, length, reset, remoteConnection, virtualKey]) FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 112 サーバーサイド ActionScript リファレンスガイド オプションの開始時刻、継続時間および再生中のすべてのストリームを消去するリセットフラグを使用して、ストリームの データソースを制御します。play() を呼び出すと、次のことができます。 • サーバー間でストリームをチェーン化します。 • ライブストリームと記録ストリームを切り替えるハブを作成します。 • 複数のストリームを 1 個の記録ストリームにまとめます。 複数のストリームを結合して、クライアント用再生リストを作成します。Stream.play() メソッドの動作は、クライアントサ イドの NetStream.play() メソッドとは異なります。Stream.play() に対するサーバーサイドの呼び出しは、NetStream.publish() に対するクライアントサイドの呼び出しと同様に、ストリームに入力されるデータのソースを制御します。サーバーで Stream.play() を呼び出すと、サーバーはパブリッシュする側になります。サーバーの優先度はクライアントより高いので、 サーバーが同じストリームに対して play() メソッドを呼び出した場合、クライアントはストリームからのパブリッシュ解除 を強制されます。 サーバーの再生リストに記録ストリームが含まれる場合、サーバーの再生リストストリームをライブストリームとして再生 することはできません。 注意:NetConnection オブジェクトを使用してリモートサーバーから再生しているストリームは、ライブストリームです。 Stream オブジェクトを削除するには、delete 演算子を使用して、ストリームを削除するマーク付けを行います。スクリプト エンジンが、ガベージコレクションルーチンでオブジェクトを削除します。 // Initialize the Stream object. s = stream.get("foo"); // Play the stream. s.play("name", p1, ... pN); // Stop the stream. s.play(false); // Mark the Stream object for deletion during server garbage routine. delete s; 使用できるバージョン Flash Communication Server 1 パラメータ streamName ストリームの名前を示す文字列。次のシンタックスを使用します。 ファイル形式 シンタックス 例 FLV ストリーム名を、ファイル名拡張子なしの文字列として指定しま す。 s.play("fileName") ストリーム名を、接頭辞 mp3: または id3: があり、ファイル拡張 s.play("mp3:fileName") MP3 子がない文字列として指定します。 MPEG-4 対応ファイル(F4V、 MP4 など) s.play("id3:fileName") ストリーム名を、接頭辞 mp4: がある文字列として指定します。 s.play("mp4:fileName") サーバー上のファイルにファイル拡張子がある場合は、ファイル 拡張子を使用します。この接頭辞は、ファイルが MPEG-4 Part s.play("mp4:fileName.mp4") 12 コンテナ形式であることをサーバーに示します。 s.play("mp4:fileName.f4v") startTime 再生開始時間を示す数値(秒)値が指定されない場合、値は -2 です。startTime が -2 の場合、サーバーは streamName で指定された名前のライブストリームを再生しようとします。再生できるライブストリームがない場合、サー バーは、streamName で指定された名前の記録ストリームを再生しようとします。記録ストリームが見つからない場合、 サーバーは、streamName で指定された名前のライブストリームを作成し、誰かがそのストリームにパブリッシュするのを 待ちます。startTime が -1 の場合、サーバーは、streamName で指定された名前のライブストリームを再生しようとし、再生 できるライブストリームが指定されていない場合は、誰かがパブリッシュするのを待ちます。startTime が 0 以上の場合、 サーバーは、streamName で指定された名前の記録ストリームを、所定の時刻から再生します。記録ストリームが見つから FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 113 サーバーサイド ActionScript リファレンスガイド ない場合、play() メソッドは無視されます。-1 以外の負の数値を指定すると、サーバーは -2 として解釈します。このパラ メータはオプションです。 length 再生時間(秒)を示す数値。ライブストリームの場合、値 -1 が指定されると、ストリームが存在する限り、スト リームが再生されます。正の数が指定されると、対応する秒数だけストリームが再生されます。記録ストリームの場合は、 値 -1 が指定されるとファイル全体が再生され、0 が指定されると最初のビデオフレームが返されます。正の数が指定される と、対応する秒数だけストリームが再生されます。デフォルト値は -1 です。このパラメータはオプションです。 reset 再生中のストリームを消去するブール値またはブール数。reset が false(0)の場合、サーバーは、再生リストを維持 し、Stream.play() の各呼び出しが再生リストの最後に付加されます。これにより、前の再生が終了してから次の再生が開始 されるようになります。この機能を使用して、動的な再生リストを作成できます。reset が true (1) の場合は、再生中のスト リームが停止するとともに、再生リストがリセットされます。デフォルト値は true です。 また、reset パラメータに 2 または 3 の数値を指定することも可能です。これは、メッセージデータが格納されている記録スト リームファイルを再生する場合に役立ちます。これらの数値は、それぞれ false(0)および true(1)に類似しています。2 は再生リストを維持し、3 は再生リストをリセットします。しかし、reset に 2 または 3 を指定すると、メッセージが本来記 録された間隔で返す(デフォルトの動作)のではなく、直ちにすべてのメッセージが指定された記録ストリームで返される という点が異なっています。 remoteConnection リモートサーバーへの接続に使用される NetConnection オブジェクト。このパラメータを指定すると、 要求されたストリームがリモートサーバーから再生されます。これはオプションのパラメータです。 virtualKey キーの値を示す文字列。Flash Media Server 2 からは、ストリームに必ずしも一意の名前を指定する必要はあり ません。同じ名前を持つ複数のストリームを作成し、異なる物理ディレクトリに置き、Vhost.xml ファイルの VirtualDirectory セクションおよび VirtualKeys セクションを使用して、クライアントに適切なストリームを指示することが できます。Stream.length() メソッドはクライアントに関連付けられてはいませんが、サーバー上のストリームに接続するた め、正しいストリームを識別するためには仮想キーを指定する必要があるでしょう。キーについての詳細は、 「Client.virtualKey」を参照してください。これはオプションのパラメータです。 戻り値 ブール値。呼び出しがサーバーに受諾された場合は true、受諾されなかった場合は false。サーバーがストリームを見つけら れない場合、またはエラーが発生した場合は、Stream.play() メソッドが失敗する可能性があります。Stream.play() メソッド に関する情報を取得するには、Stream.onStatus() ハンドラを定義します。 streamName パラメータが false であれば、ストリームの再生が停止します。停止が成功した場合はブール値 true が返され、 失敗した場合は false が返されます。 例 次の例は、サーバー間でストリームをチェーン化する方法を示します。 application.myRemoteConn = new NetConnection(); application.myRemoteConn.onStatus = function(info){ trace("Connection to remote server status " + info.code + "\n"); // Tell all the clients. for (var i = 0; i < application.clients.length; i++){ application.clients[i].call("onServerStatus", null, info.code, info.description); } }; // Use the NetConnection object to connect to a remote server. application.myRemoteConn.connect(rtmp://movie.com/movieApp); // Set up the server stream. application.myStream = Stream.get("foo"); if (application.myStream){ application.myStream.play("Movie1", 0, -1, true, application.myRemoteConn); } 次の例では、Stream.play() を、ライブストリームと記録ストリームを切り替えるハブとして使用します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 114 サーバーサイド ActionScript リファレンスガイド // Set up the server stream. application.myStream = Stream.get("foo"); if (application.myStream){ // This server stream plays "Live1", // "Record1", and "Live2" for 5 seconds each. application.myStream.play("Live1", -1, 5); application.myStream.play("Record1", 0, 5, false); application.myStream.play("Live2", -1, 5, false); } 次の例では、異なる複数のストリームを 1 個の記録ストリームにまとめます。 // Set up the server stream. application.myStream = Stream.get("foo"); if (application.myStream){ // Like the previous example, this server stream // plays "Live1", "Record1", and "Live2" // for 5 seconds each. But this time, // all the data will be recorded to a recorded stream "foo". application.myStream.record(); application.myStream.play("Live1", -1, 5); application.myStream.play("Record1", 0, 5, false); application.myStream.play("Live2", -1, 5, false); } 次の例では、Stream.play() を呼び出して、ストリーム foo の再生を停止します。 application.myStream.play(false); 次の例では、3 つの MP3 ファイル (beethoven.mp3、mozart.mp3 および chopin.mp3) の再生リストを作成し、各ファイルを ライブストリーム foo 上で順に再生します。 application.myStream = Stream.get("foo"); if(application.myStream) { application.myStream.play("mp3:beethoven", 0); application.myStream.play("mp3:mozart", 0, false); application.myStream.play("mp3:chopin.mp3", 0, false); application.myStream.play("mp4:file1.mp4", -1, 5, false); } 次の例では、F4V ファイルが再生されます。 application.myStream = Stream.get("foo"); if(application.myStream) { application.myStream.play("mp4:beethoven", 0); application.myStream.play("mp4:mozart", 0, false); } 次の例では、記録ストリームファイル log.flv 内のデータメッセージが、本来記録された間隔で返されます。 application.myStream = Stream.get("data"); if (application.myStream) { application.myStream.play("log", 0, -1); } 次の例では、記録ストリームファイル log.flv 内のデータメッセージが、本来記録された間隔ではなく、すべて同時返されま す。 application.myStream = Stream.get("data"); if (application.myStream) { application.myStream.play("log", 0, -1, 2); } サーバーサイドのストリームは、それ自体にサブスクライブすることはできません。例えば、次のコードは無効です。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 115 サーバーサイド ActionScript リファレンスガイド // Client-side code var ns = new NetStream ns.publish("TestStream"); // Server-side code st = Stream.get("TestStream"); st.play("TestStream"); Stream.publishQueryString myStream.publishQueryString ストリームがパブリッシュされたときにストリームパスで指定されたクエリ文字列。 Stream.publishQueryString、Stream.maxQueueDelay および Stream.maxQueueSize の各プロパティを使用して、ライブスト リームのライブキューを構成します。これらのサーバーサイド ActionScript プロパティは、Application.xml 構成ファイル の Application/StreamManager/Live/Queue/ セクションで設定された値を上書きします。ライブキュー(ライブ集約メッセー ジとも呼ばれる)は、複数のメッセージを 1 つの複合メッセージにバッチ処理して、サーバーのパフォーマンスを上げます。 ダイナミックストリーミングは、maxQueueDelay と maxQueueSize の値に応じて、高いビットレートストリームまたは低い ビットレートストリームにいつ切り替えるかを決定します。maxQueueDelay を、大量のデータバーストを生成するのに十分 な長さに設定します。 ストリームをパブリッシュするとき、ライブキューの構成方法を指定するパラメータを使用して、ストリームパスでクエリ 文字列を指定できます。クエリ文字列にアクセスするには、publishQueryString プロパティ(例えば、application.onPublish() 関数内からなど)にアクセスします。文字列を解析して、構成パラメータを取得します。構成パラメータの値を使用して、 Stream.maxQueueDelay プロパティと Stream.maxQueueSize プロパティを設定します。 注意:Flash Media Live Encoder 3 では、ストリーム名へのクエリ文字列の追加がサポートされます。以前のバージョンの Flash Media Encoder では、クエリ文字列はサポートされていませんでした。 使用できるバージョン Flash Media Server 3.5 例 次のクライアントサイドコードでは、クエリ文字列を使用してストリームがパブリッシュされます。 ns.publish ("exampleVideo?com.adobe.fms.maxQueueDelay=4000&com.adobe.fms.maxQueueSize=10240"); } 次のサーバーサイドコードでは、maxQueueDelay プロパティと maxQueueSize プロパティを設定することにより、クエリ文 字列が取得されて遅延およびサイズが抽出され、、ライブキューが構成されます。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 116 サーバーサイド ActionScript リファレンスガイド application.onPublish = function(clientObj, streamObj){ trace("queryString : " + streamObj.publishQueryString); // the helper function extracQueryStringArg() is defined below delay = extractQueryStringArg(streamObj.pubishQueryString, "com.adobe.fms.maxQueueDelay"); size = extractQueryStringArg(streamObj.publishQueryString, "com.adobe.fms.maxQueueSize"); trace("old maxQueueDelay : " + streamObj.maxQueueDelay); streamObj.maxQueueDelay = delay; trace("new maxQueueDelay : " + streamObj.maxQueueDelay); trace("old maxQueueSize : " + streamObj.maxQueueSize); streamObj.maxQueueSize = size; trace("new maxQueueSize : " + streamObj.maxQueueSize); } function extractQueryStringArg(queryString, arg) { var retVal = ""; temp = arg + "="; i = queryString.indexOf(temp); if (i != 0) { temp = "&" + arg + "="; i = queryString.indexOf(temp); } if (i != -1) { retVal = queryString.substr(i+temp.length); i = retVal.indexOf("&"); if (i != -1) { retVal = retVal.substr(0, i); } } return retVal; } 関連項目 Stream.maxQueueDelay、Stream.maxQueueSize Stream.record() myStream.record(flag, [maxDuration, maxSize]) Stream オブジェクトを通過するデータを記録し、記録されたストリームのファイルを作成します。この方法をメソッドを 使用すると、次の操作を実行できます。 • Stream.record() を呼び出して、新しいファイルを記録したり、既存のファイルのデータを記録されたデータで上書きでき ます。 • Stream.record("append") を呼び出して、既存のファイルの末尾に記録されたデータを追加できます。 • Stream.record(false) を呼び出して、記録をストップできます。 F4V 形式または FLV 形式で記録や追加を行うことができます。Stream.record() メソッドを呼び出す前に、Stream.get() メ ソッドを呼び出して Stream オブジェクトを作成します。記録形式は、Stream.get() メソッドに渡すファイル名により決まり ます。 注意:Flash Media Server により記録された F4V ファイルを他のツールで再生したり編集するには、Adobe Flash Media Server F4V Post Processor ツールを使用します。ツールは、www.adobe.com/go/fms_tools から入手できます。 ストリームを記録すると、Stream.get() メソッドに渡した名前のファイルが作成されます。サーバーは、アプリケーションイ ンスタンス名ごとに「streams」ディレクトリとサブディレクトリを自動的に作成します。ストリームがアプリケーション インスタンスに関連付けられていない場合は、「_definst_」(デフォルトのインスタンス)というサブディレクトリに格納さ FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 117 サーバーサイド ActionScript リファレンスガイド れます。例えば、デフォルトのセミナーアプリケーションインスタンスからのストリームは、 applications\lectures\streams\_definst_ に格納されます。月曜セミナーアプリケーションインスタンスからのストリーム は、applications\lectures\streams\monday に格納されます。 ライブストリームをファイルに追加するには、Stream.get() メソッドに渡されるストリーム名が、クライアント NetStream.publish() メソッドのライブストリーム名と異なっている必要があります。それ以外の場合は、クライアントサイ ドとサーバーサイドのストリーム名が同じでも構いません。 使用できるバージョン Flash Communication Server 1 パラメータ flag「record」、「append」または「false」のいずれかの値を指定します。値が「record」の場合、既存のデータファイルは上 書きされます。値が「append」の場合は、既存ファイルの最後に入力データが付加されます。値が false の場合は、進行中の 記録がすべて停止します。デフォルト値は「record」です。 maxDuration 記録の最大期間(秒数)を指定するオプションパラメータ。パブリッシュされるストリームがこの期間を超え ると、記録が停止して、「NetStream.Record.Stop」ステータスメッセージがストリームの onStatus ハンドラに送信されま す。このパラメータを設定すると、Application.xml 構成ファイルの MaxDuration エレメントが上書きされます。ただし、 MaxDurationCap エレメントで設定された上限を超えることはできません。記録の期間に制限を指定しない場合は、このパ ラメータを -1 に設定します。デフォルト値は -1 です。 注意:ライブイベントが maxDuration パラメータまたは maxSize パラメータを超えた場合は、記録が停止します。記録が停 止すると、"NetStream.Record.Stop" ステータス メッセージより前に "NetStream.Record.DiskQuotaExceeded" ステータスメッ セージが NetStream.onStatus() メソッドに渡されます。 maxSize 記録の最大サイズ(キロバイト)を指定するオプションパラメータ。パブリッシュされるストリームがこのサイズ を超えると、記録が停止して、"NetStream.Record.Stop" ステータスメッセージがストリームの onStatus ハンドラに送信され ます。このパラメータを設定すると、Application.xml 構成ファイルの MaxSize エレメントが上書きされます。ただし、 MaxSizeCap エレメントで設定された上限を超えることはできません。記録のサイズに制限を指定しない場合は、このパラ メータを -1 に設定します。デフォルト値は -1 です。 戻り値 記録が成功した場合はブール値 true、失敗した場合は false。 例 次の例は、ライブストリームをパブリッシュするクライアント、ストリームを記録するサーバー、記録済みストリームにサ ブスクライブするクライアントを示しています。 最初にクライアントがライブストリームをパブリッシュします。 myNetStream.publish("clientStream", "live"); 次に、サーバーが serverStream というストリームを開き、Stream オブジェクト s に格納します。サーバーサイドコードは、 クライアントによりパブリッシュされたストリームを再生して F4V 形式で記録します。記録されるファイルの名前は、 「serverStream.f4v」です。これは、Stream.get() メソッドに渡された名前です。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 118 サーバーサイド ActionScript リファレンスガイド //Start recording s = Stream.get("mp4:serverStream.f4v"); if (s){ s.record(); s.play("clientStream"); } // Stop recording. s = Stream.get("serverStream"); if (s){ s.record(false); } クライアントは、クライアントサイドコードを使用して、クライアントによりパブリッシュされ、サーバーに記録されたラ イブストリームをサブスクライブできます。 someNetStream.play("mp4:serverStream.f4v"); 関連項目 Stream.get()、Stream.play() Stream.send() myStream.send(handlerName, [p1, ..., pN]) ストリームをサブスクライブするクライアントサイドの NetStream オブジェクトのリモートメソッドを呼び出し、任意の ActionScript データ型のパラメータに渡します。サーバーは応答オブジェクトを受信せず、クライアントサイドのメソッド によって返された値は破棄されます。 Stream.send() を呼び出して、ストリームにサブスクライブするクライアントにデータを送信することができます。データは p1,..., pN パラメータにより、サブスクライブ側で定義される handlerName メソッドに渡されます。handlerName() というメ ソッドが定義された場合でも、パブリッシュするストリームはリモートメソッド呼び出しを受信しません。 Stream.send() を呼び出して、データキーフレーム内のライブストリームにサブスクライブするクライアントにメタデータを 送信することができます。クライアントが再生後のライブストリームにサブスクライブすると、ストリームのメタデータを 受信しない場合があります。このメタデータには、ストリームの長さ、スピーカー名、ブロードキャストの場所など、スト リームに関してクライアントに通知する必要がある情報を含めることができます。 データキーフレームは、ライブストリームに追加し、サーバーのメモリ内に格納できる特殊なデータメッセージです。デー タキーフレームは、クライアントがストリームにサブスクライブしたときに取得されます。データキーフレームの設定また は消去をサーバーに通知する予約値には、@setDataFrame および @clearDataFrame の 2 つがあります。他のデータメッセー ジと同様に、データキーフレームにはハンドラ名とパラメータのリストが含まれています。データキーフレームを設定また は消去するには、次のシンタックスを使用します。 Stream.send("@setDataFrame", handlerName [, p1, p2, ..., pN ]); それぞれのライブストリームに対して、複数のデータキーフレームを送信することができます。ただし、データキーフレー ムのハンドラ名は一意でなければなりません。データキーフレームの設定とクリアを行うことができるのは、ストリームの パブリッシュ元とサーバーだけです。ストリーム内にデータキーフレームを設定するには、クライアントサイドの ActionScript NetStream.send() メソッドまたはサーバーサイドの ActionScript Stream.send() メソッドを呼び出します。 データキーフレームの設定は、Flash Media Interactive Server 3 および Flash Media Development Server 3 以降でサポー トされています。 注意:サーバーは、メッセージを送信するためにクライアントからストリームの所有権を獲得する必要はありません。 send() が呼び出された後も、クライアントはパブリッシュする側としてストリームを所有しています。これは、 Stream.play() メソッドの動作とは異なります。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 119 サーバーサイド ActionScript リファレンスガイド 使用できるバージョン Flash Communication Server 1 パラメータ handlerName クライアントを呼び出すリモートメソッドを示す文字列。handlerName 値は、サブスクライブする側の Stream オブジェクトを基準とする、メソッドの相対名です。例えば、handlerName が doSomething の場合は、ストリーム レベルにある doSomething メソッドが、p1, ..., pN パラメータのすべてとともに呼び出されます。Client.call() および NetConnection.call() のメソッド名とは異なり、このハンドラ名は、1 レベルの深さにしかできません(つまり、 object/method という形式にはできません)。 注意:ビルトインメソッドの名前をハンドラ名に使用しないでください。例えば、ハンドラ名が close である場合、接続して いるストリームは閉じられます。 p1, ..., pN 他の ActionScript オブジェクトへの参照を含む、任意の ActionScript 型のパラメータ。これらのパラメータは、 指定されたハンドラが Flash クライアントで実行されるときに、そのハンドラに渡されます。 戻り値 メッセージがクライアントに送信された場合はブール値 true、送信されない場合は false。 例 次の例では、クライアントサイド NetStream オブジェクトで onMsg() メソッドを呼び出し、これに文字列 "Hello World" を 送信します。 s = Stream.get("testStream"); s.send("onMsg", "Hello World"); 次のクライアントサイド ActionScript は、testStream ストリーム上で渡されたデータを処理するメソッドを定義します。 ns = new NetStream(nc); ns.onMsg = function(str) { trace(str); //"Hello World" is output } ns.play("testStream", -2, -1, 3); 次の例は、ライブストリームにメタデータを追加します。 s = new Stream(nc); s.onStatus = function(info){ if (info.code == "NetStream.Publish.Start"){ metaData = new Object(); metaData.title = "myStream"; metaData.width = 400; metaData.height = 200; this.send("@setDataFrame", "onMetaData", metaData); } }; s.publish("myStream"); Stream.setBufferTime() myStream.setBufferTime() メッセージキューの長さを設定します。リモートサーバーからストリームを再生すると、Stream.setBufferTime() メソッドが リモートサーバーにメッセージを送信します。このメッセージは、メッセージキューの長さを調整します。メッセージ キューのデフォルトの長さは 0 秒です。帯域幅の狭いネットワークで高品質の記録ストリームを再生する場合は、バッファ 時間を長く設定する必要があります。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 120 サーバーサイド ActionScript リファレンスガイド アプリケーション内でユーザーがシークボタンを押すと、バッファされていたパケットがサーバーに送信されます。Flash Media Server アプリケーションでのバッファシークがサーバーで実行されます。Flash Media Server では、クライアント サイドのバッファリングはサポートされていません。シーク時間は、バッファサイズより短くすることも、長くすることも 可能です。シーク時間とバッファサイズには、直接の関係はありません。サーバーは、Flash Player からシーク要求を受信 するたびに、サーバーにあるメッセージキューをクリアします。サーバーは、目的の位置までのシークを開始し、キューを 再び埋め始めます。同時に、Flash Player も、シーク要求後に自身のバッファをクリアします。このバッファが再び埋まる のは、サーバーが新しいメッセージの送信を開始してからです。 使用できるバージョン Flash Communication Server 1 Stream.setVirtualPath() myStream.setVirtualPath(virtualPath, directory, virtualKey) ビデオストリームを再生するための仮想ディレクトリパスを設定します。物理ディレクトリに仮想ディレクトリパスをマッ ピングし、そのマッピングを仮想キーに割り当てます。仮想キーは、Flash Player のバージョン範囲を指定します。これら のマッピングにより、Flash Player のバージョンに基づいて、同じ URL を使用して異なるバージョンのストリームを配信 することができます。 最初に、Flash Player のバージョンと、Vhost.xml ファイルの VirtualKeys セクション内の仮想キーとの間でマッピングを 作成します。Flash Player が Flash Media Interactive Server からストリームを要求すると、次の例に示すように、 Vhost.xml ファイルで設定した値に基づいて、Flash Player のバージョンが仮想キーにマッピングされます。 elements as you need.--> 9,0,59,0">A 7,0,55,0">B 次に、Vhost.xml ファイルの VirtualDirectory セクションで、セミコロンで区切られた仮想パスと物理ディレクトリに仮想 キーをマッピングします(例えば、foo;c:\streams)。Flash Player のバージョンごとに仮想ディレクトリをセットアップする には、次の例にあるように、Streams タグごとに異なる物理ディレクトリを設定した、同じ仮想パスを使用します。 foo;c:\streams\on2 foo;c:\streams\sorenson Flash Media Interactive Server は、仮想キーがマッピングされた仮想ディレクトリからのストリームをクライアントに提 供します。例えば、クライアントが Flash Player 8 で、呼び出しが myNetStream.play("foo/familyVideo") である場合、キー A を指定した Streams エレメントを使用することで、より高品質のストリーム c:\streams\on2\familyVideo.flv がクライアン トに配信されます。クライアントが Flash Player 7 である場合は、Sorenson ストリームディレクトリと c:\streams\sorenson\familyVideo.flv ファイルの再生に同じ URL がマッピングされます。 一般的には、Vhost.xml ファイル内の VirtualKeys および VirtualDirectory エレメントの値を変更します。ただし、 Stream.setVirtualPath() を呼び出して Streams エレメントを作成し、また Client.virtualKey を使用してクライアントの Key 値 を設定することができます。 使用できるバージョン Flash Media Server 2 パラメータ virtualPath ストリームの仮想ディレクトリパスを示す文字列。ストリームが仮想パス内に位置していない場合、デフォルト の仮想ディレクトリパスが検索されます。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 121 サーバーサイド ActionScript リファレンスガイド directory ストリームの格納先である物理ディレクトリを示す文字列。 virtualKey 各 Streams エントリのキー値を設定または削除する文字列。 注意:virtualPath パラメータと directory パラメータでスラッシュを示すには、スラッシュ(/)またはダブルバックスラッ シュ(\\)を使用する必要があります。文字列では、バックスラッシュ 1 つは文字のエスケープに使用します。ダブルバック スラッシュは、バックスラッシュ文字のエスケープシーケンスです。 例 次のコードでは、仮想キーを B に、仮想パスを foo に、そして物理ディレクトリを c:\streams\on2 に設定します。 Stream.setVirtualPath("foo", "c:/streams/on2", "B"); Stream.size() Stream.size(name[, virtualKey]) 静的。記録ストリームのサイズをバイト単位で返します。 使用できるバージョン Flash Media Server 2 パラメータ name ストリームの名前を示す文字列。name パラメータの format タグを使用して、タイプを指定します。 virtualKey キーの値を示す文字列。Flash Media Server 2 からは、ストリームに必ずしも一意の名前を指定する必要はあり ません。同じ名前を持つ複数のストリームを作成し、異なる物理ディレクトリに置き、Vhost.xml ファイルの VirtualDirectory セクションおよび VirtualKeys セクションを使用して、クライアントに適切なストリームを指示することが できます。Stream.size() メソッドはクライアントに関連付けられてはいませんが、サーバー上のストリームに接続するため、 正しいストリームを識別するためには仮想キーを指定する必要があるでしょう。キーについての詳細は、「Client.virtualKey」 を参照してください。このパラメータはオプションです。 戻り値 数値。要求されたストリームが見つからない場合は 0 を返します。 例 次の例では、ストリームおよび MP3 および F4V ストリームのサイズがそれぞれ表示されます。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 122 サーバーサイド ActionScript リファレンスガイド function onProcessCmd(cmd){ // Insert code here... var streamSize = Stream.size("foo"); trace("Size: " + streamSize + "\n"); } //For MP3 files function onProcessCmd(cmd){ // Insert code here... var streamSize = Stream.size("mp3:foo" ); trace("Size: " + streamSize + "\n"); } //For F4V files function onProcessCmd(cmd){ // Insert code here... var streamSize = Stream.size("mp4:foo"); trace("Size: " + streamSize + "\n"); } Stream.syncWrite myStream.syncWrite ストリームの記録時にストリームがバッファの内容をファイルに書き込むときの制御をするブール値。syncWrite が true で ある場合、ストリームを通過するすべてのメッセージは、直ちに ファイルに保存されます。データのみを含むストリームに おいてのみ syncWrite を true に設定することを強くお勧めします。データの他にオーディオかビデオ、またはその両方を含 むストリーム上で syncWrite を true に設定した場合、同期化の問題が発生する可能性があります。 使用できるバージョン Flash Media Server 2 例 次の例では、データが直ちに ファイルに保存されます。 // Assume foo is a data-only stream. application.myStream = Stream.get("foo"); if (application.myStream){ application.myStream.syncWrite = true; application.myStream.record(); application.myStream.send("test", "hello world"); } Stream.time myStream.time 読み取り専用。ストリームが再生された秒数。この値は、ストリームから流出した最新のフレームのタイムスタンプです。 使用できるバージョン Flash Media Interactive Server 3.5 および Flash Media Development Server 3.5 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 123 サーバーサイド ActionScript リファレンスガイド WebService クラス 使用できるバージョン Flash Media Server 2 説明 WebService クラスを使用して、WSDL/SOAP の Web サービスを作成し、アクセスすることができます。Flash Media Interactive Server の Web サービス機能を構成するクラスには、WebService クラス、SOAPFault クラス、SOAPCall ク ラスおよび Log クラスがあります。 注意:WebService クラスは、Web サービスから返された複雑なデータや配列を取得することはできません。また、 WebService クラスはセキュリティ機能をサポートしていません。 次の手順は、Web サービスを作成しアクセスするプロセスの概要を示します。 Web サービスを作成し、アクセスします。 1 WebServices クラスをロードします。 load("webservices/WebServices.asc"); 2 WSDL の場所を準備します。 var wsdlURI = "http://www.flash-db.com/services/ws/companyInfo.wsdl"; 3 WSDL の場所を使用して、Web サービスオブジェクトをインスタンス化します。 stockService = new WebService(wsdlURI); 4 (オプション)WebService.onLoad() ハンドラを介して、WSDL 解析および Web サービスのインスタンス化イベントを処 理します。 // Handle the WSDL loading event. stockService.onLoad = function(wsdl){ wsdlField.text = wsdl; } 5 (オプション)WSDL がロードを実行しない場合、失敗を処理します。 // If the WSDL fails to load, the onFault event is fired. stockService.onFault = function(fault){ wsdlField.text = fault.faultstring; } 6 (オプション)SOAP ヘッダーを設定します。 // If headers are required, they are added as follows: var myHeader = new XML(headerSource); stockService.addHeader(myHeader); 7 Web サービスの操作を呼び出します。 // Method invocations return an asynchronous callback. callback = stockService.doCompanyInfo("anyuser", "anypassword", "ADBE"); // NOTE: callback is undefined if the service itself is not created // (and service.onFault is also invoked). 8 呼び出しから返された出力またはエラーの失敗のいずれかを処理します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 124 サーバーサイド ActionScript リファレンスガイド // Handle a successful result. callback.onResult = function(result){ // Receive the SOAP output, which in this case // is deserialized as a struct (ActionScript object). for (var i in result){ trace(i +" : " +result[i]); } } // Handle an error result. callback.onFault = function(fault){ // Catch the SOAP fault and handle it // according to this application's requirements. for (var i in fault){ trace(i +" : " +fault[i]); } } イベントハンドラ一覧 イベントハンドラ 説明 WebService.onFault() WSDL の解析中にエラーが発生したときに呼び出されます。 WebService.onLoad() Web サービスが WSDL ファイルのロードおよび解析に成功したときに呼び出されます。 WebService コンストラクタ new WebService(wsdlURI) 新しい WebService オブジェクトを作成します。WebService クラスのメソッドを呼び出す前に、コンストラクタを使用し て WebService オブジェクトを作成する必要があります。 使用できるバージョン Flash Media Server 2 パラメータ wsdlURI WSDL の URI を指定する文字列。 戻り値 WebService オブジェクト 例 次の例では、WSDL の場所を準備し、それを WebService コンストラクタに渡して新しい WebService オブジェクト stockService を作成します。 load("webservices/WebServices.asc"); var wsdlURI = "http://www.flash-db.com/services/ws/companyInfo.wsdl"; stockService = new WebService(wsdlURI); WebService.onFault() myWS.onFault(fault){} WSDL の解析中にエラーが発生したときに呼び出されます。Web サービス機能は、処理を簡単にするため、解析の問題と ネットワークの問題を SOAP の失敗に変換します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 125 サーバーサイド ActionScript リファレンスガイド 使用できるバージョン Flash Media Server 2 パラメータ fault XML SOAP の失敗のオブジェクト版(103 ページの「SOAPFault クラス」を参照)。 例 次の例では、WSDL がロードに失敗して、onFault() イベントが呼び出されると、テキストフィールドに失敗コードが表示 されます。 // Load the WebServices class: load("webservices/WebServices.asc"); // Prepare the WSDL location: var wsdlURI = "http://www.flash-db.com/services/ws/companyInfo.wsdl"; // Instantiate the web service object by using the WSDL location: stockService = new WebService(wsdlURI); // Handle the WSDL parsing and web service instantiation event: stockService.onLoad = function(wsdl){ wsdlField.text = wsdl; } // If the WSDL fails to load, the onFault event is fired: stockService.onFault = function(fault){ wsdlField.text = fault.faultstring; } WebService.onLoad() myWS.onLoad(wsdldocument) Web サービスが WSDL ファイルのロードおよび解析に成功したときに呼び出されます。このイベントが発生する前にアプ リケーションで操作が呼び出されると、その操作は内部キューに格納され、WSDL がロードされるまで実際には送信されま せん。 使用できるバージョン Flash Media Server 2 パラメータ wsdldocument WSDL XML ドキュメント。 例 次の例では、onLoad イベントを使用して、WSDL の解析を処理します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 126 サーバーサイド ActionScript リファレンスガイド // Load the WebServices class: load("webservices/WebServices.asc"); // Prepare the WSDL location: var wsdlURI = "http://www.flash-db.com/services/ws/companyInfo.wsdl"; // Instantiate the web service object by using the WSDL location: stockService = new WebService(wsdlURI); // Handle the WSDL parsing and web service instantiation event: stockService.onLoad = function(wsdl){ wsdlField.text = wsdl; } XML クラス XML クラスでは、XML ドキュメントツリーのロード、解析、送信、作成、操作をすることができます。 注意:XML ファイルは HTTP を介してのみロードできます。RTMP ではロードできません。 XML クラスのメソッドを呼び出す前に、new XML() コンストラクタを使用して XML オブジェクトを作成する必要があり ます。 XML ドキュメントは、XML クラスで表現されます。ドキュメントの各エレメントが、XMLNode オブジェクトで表され ます。 XML オブジェクトおよび XMLNode オブジェクトは、www.w3.org にある Document Object Model Level 1 勧告の後に モデル化されました。この勧告では、Node インターフェイスおよび Document インターフェイスが規定されています。 Document インターフェイスは Node インターフェイスから継承され、createElement() や createTextNode() などのメソッド が追加されています。ActionScript では、XML オブジェクトと XMLNode オブジェクトの機能の違いは、同様の方針で設 計されています。 注意:XML クラスのコード例の多くには、trace() ステートメントが含まれています。サーバーサイド trace() ステートメン トは、アプリケーションログファイルと、Administration Console の Live Log パネルに出力されます。 使用できるバージョン Flash Media Server 2 プロパティ一覧 プロパティ 説明 XML.attributes 指定された XML オブジェクトのすべての属性を含むオブジェクト。 XML.childNodes 読み取り専用。指定された XML オブジェクトの子の配列。 XML.contentType XML.send() メソッドまたは XML.sendAndLoad() メソッドを呼び出したときにサーバーに送信される MIME コンテ ンツタイプ。 XML.docTypeDecl XML ドキュメントの DOCTYPE 宣言についての情報を指定します。 XML.firstChild 読み取り専用。指定された XML オブジェクトを評価し、親ノードの子リスト内の最初の子を参照します。 XML.ignoreWhite true に設定すると、空白のみを含むテキストノードは解析処理中に破棄されます。 XML.lastChild 読み取り専用。ノードの子リスト内の最後の子を参照する XMLNode 値です。 XML.loaded ブール値。XML.load() 呼び出しによって開始されたドキュメントのロード処理が正常に完了した場合は true、それ 以外の場合は false。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 127 サーバーサイド ActionScript リファレンスガイド プロパティ 説明 XML.localName 読み取り専用。XML ノード名のローカル名部分。 XML.namespaceURI 読み取り専用。XML ノードに接頭辞が付いている場合、xmlns はその接頭辞(URI)の xmlns 宣言の値となります。 これは通常、名前空間 URI と呼ばれます。 XML.nextSibling 読み取り専用。親ノードの子リスト内の次の子ノードを参照する XMLNode 値。 XML.nodeName XML オブジェクトのノード名を表す文字列です。 XML.nodeType 読み取り専用。nodeType の値。XML エレメントの場合は 1、テキストノードの場合は 3 になります。 XML.nodeValue XML オブジェクトのノード値。 XML.parentNode 読み取り専用。指定された XML オブジェクトの親ノードを参照する XMLNode 値です。ノードに親がない場合は null を返します。 XML.prefix 読み取り専用。XML ノード名の接頭辞部分。 XML.previousSibling 読み取り専用。親ノードの子リスト内の前の子ノードを参照する XMLNode 値。 XML.status XML ドキュメントが XML オブジェクトに正常に解析されたかどうかを示す数値。 XML.xmlDecl ドキュメントの XML 宣言についての情報を指定します。 メソッド一覧 メソッド XML.addRequestHeader() 説明 POST アクションによって送信される HTTP 要求ヘッダー(Content-Type や SOAPAction など)を追 加または変更します。 XML.appendChild() XML.cloneNode() 指定されたノードを XML オブジェクトの子リストに追加します。 指定された XML オブジェクトと同じタイプ、名前、値、Administration Console 値、属性を持つ新し い XMLNode オブジェクトを構成し、返します。 XML.createElement() name パラメータで指定された名前を持つ新しい XML エレメントを作成します。 XML.createTextNode() 指定されたテキストを持つ新しい XML テキストノードを作成します。 XML.getBytesLoaded() 指定の XML ドキュメントに対してロード(ストリーム)されたバイト数を返します。 XML.getBytesTotal() XML ドキュメントのサイズをバイト単位で返します。 XML.getNamespaceForPrefix() ノードに指定された接頭辞に関連付けられている名前空間 URI を返します。 XML.getPrefixForNamespace() ノードに指定された名前空間 URI に関連付けられている接頭辞を返します。 XML.hasChildNodes() 指定された XML オブジェクトに子ノードがある場合は true を、それ以外の場合は false を返します。 XML.insertBefore() XML オブジェクトの子リスト内の指定したノードの前に新しい子ノードを挿入します。 XML.load() File オブジェクトからまたは HTTP の URL から XML ドキュメントをロードし、指定された XML オブ ジェクトの内容を XML データで置き換えます。 XML.parseXML() source パラメータで指定された XML テキストを解析し、指定された XML オブジェクトに XML ツリー を設定します。 XML.removeNode() 指定した XML オブジェクトをその親から削除し、そのノードのすべての子孫を削除します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 128 サーバーサイド ActionScript リファレンスガイド メソッド 説明 XML.send() 指定された XML オブジェクトを XML ドキュメントにエンコードし、ブラウザで POST メソッドを使用 して、指定された URL に送信します。 指定された XML オブジェクトを XML ドキュメントにエンコードし、指定された URL に HTTP POST メ XML.sendAndLoad() ソッドを使用して送信し、サーバーの応答をダウンロードし、指定されたオブジェクトにロードします。 指定された XML オブジェクトを評価し、ノード、子および属性を含む XML 構造体のテキスト表現を作 XML.toString() 成し、結果を文字列として返します。 イベントハンドラ一覧 イベントハンドラ XML.onData() 説明 サーバーからの XML テキストのダウンロードが完了するか、サーバーからの XML テキストのダウンロード中に エラーが発生すると呼び出されます。 XML.onHTTPStatus() Flash Media Interactive Server がサーバーから HTTP ステータスコードを受け取ると呼び出されます。 XML.onLoad() サーバーから XML ドキュメントが受信されると呼び出されます。 XML コンストラクタ new XML([source]) 新しい XML オブジェクトを作成します。XML クラスのメソッドを呼び出す前に、コンストラクタを使用して XML オブ ジェクトを作成する必要があります。 注意:XML ドキュメントツリーにエレメントとテキストノードを追加するには、createElement() メソッドと createTextNode() メソッドを使用します。 使用できるバージョン Flash Media Server 2 パラメータ source 文字列。新しい XML オブジェクトを作成するために解析される XML テキスト。 戻り値 XML オブジェクトへの参照。 例 次の例では、新しい空の XML オブジェクトを作成します。 var my_xml = new XML(); 次の例では、source パラメータで指定された XML テキストを解析することによって XML オブジェクトを作成し、新しく 作成した XML オブジェクトに XML ドキュメントツリーを設定します。 var other_xml = new XML("San Francisco"); 関連項目 XML.createElement()、XML.createTextNode() FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 129 サーバーサイド ActionScript リファレンスガイド XML.addRequestHeader() my_xml.addRequestHeader(headerName, headerValue) my_xml.addRequestHeader([headerName_1, headerValue_1 ... headerName_n, headerValue_n]) POST アクションによって送信される HTTP 要求ヘッダー(Content-Type や SOAPAction など)を追加または変更します。 シンタックス 1 では、2 つの文字列 (headerName および headerValue) をメソッドに渡します。シンタックス 2 では、ヘッ ダー名とヘッダー値を交互に含む文字列の配列を渡します。 同じヘッダー名に対して複数の呼び出しを実行すると、呼び出しのたびに前の呼び出しで設定された値が上書きされます。 このメソッドを使用して、次に示す標準の HTTP ヘッダーを追加または変更することはできません。Accept-Ranges、 Age、Allow、Allowed、Connection、Content-Length、Content-Location、Content-Range、ETag、Host、LastModified、Locations、Max-Forwards、Proxy-Authenticate、Proxy-Authorization、Public、Range、Retry-After、 Server、TE、Trailer、Transfer-Encoding、Upgrade、URI、Vary、Via、Warning および WWW-Authenticate。 注意:XML.addRequestHeader() を呼び出して Content-Type ヘッダーの値を設定すると、XML.contentType プロパティで設 定されている値が更新されます。 使用できるバージョン Flash Media Server 2 パラメータ headerName HTTP リクエストヘッダー名を表す文字列。 headerValue headerName に関連付けられた値を表す文字列。 例 次の例では、SOAPAction というカスタム HTTP ヘッダーを、my_xml という XML オブジェクトに追加します。値は Foo です。 my_xml.addRequestHeader("SOAPAction", "'Foo'"); 次の例では、headers という配列を作成します。この配列には、HTTP ヘッダーとその値が交互に格納されます。この配列 を addRequestHeader() メソッドにパラメータとして渡します。 var headers = new Array("Content-Type", "text/plain", "X-ClientAppVersion", "2.0"); my_xml.addRequestHeader(headers); XML.appendChild() my_xml.appendChild(childNode) 指定されたノードを XML オブジェクトの子リストに追加します。このメソッドは、childNode パラメータで参照されるノー ドに直接実行されます。ノードのコピーが追加されるわけではありません。追加するノードが別のツリー構造内に既に存在 している場合は、ノードを新しい場所に追加すると現在の場所からノードが削除されます。childNode パラメータが、別の XML ツリー構造内にすでに存在しているノードを参照している場合、追加される子ノードは、今までの親ノードから削除 された後で新しいツリー構造に置かれます。 使用できるバージョン Flash Media Server 2 パラメータ childNode 現在の場所から my_xml オブジェクトの子リストに移動されるノードを表す XMLNode オブジェクト。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 130 サーバーサイド ActionScript リファレンスガイド 戻り値 成功した場合はブール値 true、失敗した場合は false。 例 次の例では、これらの作業を実行します。 1 2 つの空の XML ドキュメント、doc1 および doc2 を作成します。 2 createElement() メソッドを使用して新しいノードを作成し、appendChild() メソッドを使用してそのノードを XML ド キュメント doc1 に追加します。 3 ルートノードを doc1 から doc2 に移動して、appendChild() メソッドを使用してノードを移動する方法を示します。 4 doc2 からルートノードを複製し、そのノードを doc1 に追加します。 5 新しいノードを作成し、それを XML ドキュメント doc1 のルートノードに追加します。 var doc1 = new XML(); var doc2 = new XML(); // Create a root node and add it to doc1. var rootnode = doc1.createElement("root"); doc1.appendChild(rootnode); trace ("doc1: " + doc1); // output: doc1: trace ("doc2: " + doc2); // output: doc2: // Move the root node to doc2. doc2.appendChild(rootnode); trace ("doc1: " + doc1); // output: doc1: trace ("doc2: " + doc2); // output: doc2: // Clone the root node and append it to doc1. var clone = doc2.firstChild.cloneNode(true); doc1.appendChild(clone); trace ("doc1: " + doc1); // output: doc1: trace ("doc2: " + doc2); // output: doc2: // Create a new node to append to root node (named clone) of doc1. var newNode = doc1.createElement("newbie"); clone.appendChild(newNode); trace ("doc1: " + doc1); // output: doc1: XML.attributes my_xml.attributes 指定された XML オブジェクトのすべての属性を含むオブジェクト。連想配列は、通常の配列で使用される順序付き整数の 索引ではなく、キーを索引として使用します。連想配列 XML.attributes では、キー索引は属性の名前を表す文字列です。 キー索引に関連付けられている値は、その属性に関連付けられている文字列の値です。例えば、color という名前の属性があ る場合、次のコードで示すように、color をキー索引として指定して、その属性の値を取得することができます。 var myColor = doc.firstChild.attributes.color 使用できるバージョン Flash Media Server 2 例 次の例では、XML 属性の名前を表示します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 131 サーバーサイド ActionScript リファレンスガイド // Create a tag called 'mytag' with // an attribute called 'name' with value 'Val'. var doc = new XML(" item "); // Assign the value of the 'name' attribute to variable y. var y = doc.firstChild.attributes.name; trace (y);// output: Val // Create a new attribute named 'order' with value 'first'. doc.firstChild.attributes.order = "first"; // Assign the value of the 'order' attribute to variable z. var z = doc.firstChild.attributes.order trace(z);// output: first XML.childNodes my_xml.childNodes 読み取り専用。指定された XML オブジェクトの子の配列。配列内の各エレメントは、子ノードを表す XML オブジェクト への参照です。これは読み取り専用プロパティであり、子ノードを操作する場合には使用できません。子ノードを操作する には、XML.appendChild()、XML.insertBefore() および XML.removeNode() メソッドを使用します。 テキストノード (nodeType == 3) の場合、このプロパティは undefined になります。 使用できるバージョン Flash Media Server 2 例 次の例では、XML.childNodes プロパティを使用して子ノードの配列を返す方法を示します。 // Create a new XML document. var doc = new XML(); // Create a root node. var rootNode = doc.createElement("rootNode"); // Create three child nodes. var oldest = doc.createElement("oldest"); var middle = doc.createElement("middle"); var youngest = doc.createElement("youngest"); // Add the rootNode as the root of the XML document tree. doc.appendChild(rootNode); // Add each of the child nodes as children of rootNode. rootNode.appendChild(oldest); rootNode.appendChild(middle); rootNode.appendChild(youngest); // Create an array and use rootNode to populate it. var firstArray:Array = doc.childNodes; trace (firstArray); // Output: // Create another array and use the child nodes to populate it. var secondArray = rootNode.childNodes; trace(secondArray); // Output: ,, FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 132 サーバーサイド ActionScript リファレンスガイド 関連項目 XML.nodeType XML.cloneNode() my_xml.cloneNode(deep) 指定された XML オブジェクトと同じタイプ、名前、値、Administration Console 値、属性を持つ新しい XMLNode オブ ジェクトを構成し、返します。deep に true を設定すると、すべての子ノードのクローンが再帰的に作成されるため、元のオ ブジェクトのドキュメントツリーが正確に複製されます。 返されたノードのクローンは、クローン作成元のアイテムのツリーとは関連がなくなります。その結果、nextSibling、 parentNode および previousSibling の値はすべて null になります。deep パラメータに false が設定されている場合、または my_xml に子ノードがない場合は、firstChild および lastChild も null です。 使用できるバージョン Flash Media Server 2 パラメータ deep ブール値。true に設定した場合、指定された XML オブジェクトの子のクローンが再帰的に作成されます。その他の 場合は false です。 戻り値 XMLNode オブジェクト。 例 次の例では、XML.cloneNode() メソッドを使用してノードのコピーを作成する方法を示します。 // Create a new XML document. var doc = new XML(); // Create a root node. var rootNode = doc.createElement("rootNode"); // Create three child nodes. var oldest = doc.createElement("oldest"); var middle = doc.createElement("middle"); var youngest = doc.createElement("youngest"); // Add the rootNode as the root of the XML document tree. doc.appendChild(rootNode); // Add each of the child nodes as children of rootNode. rootNode.appendChild(oldest); rootNode.appendChild(middle); rootNode.appendChild(youngest); // Create a copy of the middle node by using cloneNode(). var middle2 = middle.cloneNode(false); // Insert the clone node into rootNode between // the middle and youngest nodes. rootNode.insertBefore(middle2, youngest); trace(rootNode); // Output (with line breaks added): // // FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 133 サーバーサイド ActionScript リファレンスガイド // // // // // Create a copy of rootNode by using cloneNode() to demonstrate a deep copy. var rootClone = rootNode.cloneNode(true); // Insert the clone, which contains all child nodes, to rootNode. rootNode.appendChild(rootClone); trace(rootNode); // Output (with line breaks added): // // // // // // // // // // // // XML.contentType my_xml.contentType XML.send() メソッドまたは XML.sendAndLoad() メソッドを呼び出したときにサーバーに送信される MIME コンテンツタイ プ。デフォルト値は application/x-www-form-urlencoded です。これはほとんどの HTML フォームで使用される標準 の MIME コンテンツタイプです。 使用できるバージョン Flash Media Server 2 例 次の例では、新しい XML ドキュメントを作成し、そのドキュメントのデフォルトのコンテンツタイプを確認します。 // Create a new XML document. var doc = new XML(); // Trace the default content type. trace(doc.contentType); // output: application/x-www-form-urlencoded XML.createElement() my_xml.createElement(name) name パラメータで指定された名前を持つ新しい XML エレメントを作成します。初期状態では、新しいエレメントには、 親、子および兄弟はありません。このメソッドは、エレメントとして新しく作成された XML オブジェクトへの参照を返し ます。このメソッドと XML.createTextNode() メソッドは、XML オブジェクトのノードを作成するためのコンストラクタメ ソッドです。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 134 サーバーサイド ActionScript リファレンスガイド 使用できるバージョン Flash Media Server 2 パラメータ name 作成された XML エレメントのタグ名を示す文字列。 戻り値 XML ノード。XML エレメント。 例 次の例では、createElement() メソッドを使用して 3 つの XMLNode オブジェクトを作成します。 // Create an XML document. var doc = new XML(); // Create three XML nodes by using createElement(). var element1 = doc.createElement("element1"); var element2 = doc.createElement("element2"); var element3 = doc.createElement("element3"); // Place the new nodes into the XML tree. doc.appendChild(element1); element1.appendChild(element2); element1.appendChild(element3); trace(doc); // Output: 関連項目 XML.createTextNode() XML.createTextNode() my_xml.createTextNode(text) 指定されたテキストを持つ新しい XML テキストノードを作成します。初期状態では、新しいノードには親がありません。 また、テキストノードは、子または兄弟を持つことができません。このメソッドは、新しいテキストノードを表す XML オ ブジェクトへの参照を返します。このメソッドと XML.createElement() メソッドは、XML オブジェクトのノードを作成する ためのコンストラクタメソッドです。 使用できるバージョン Flash Media Server 2 パラメータ text 文字列。新しいテキストノードを作成するためのテキスト。 戻り値 XML ノード。 例 次の例では、createTextNode() メソッドを使用して XML テキストノードを 2 つ作成し、それらを既存の XML ノードに追加 します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 135 サーバーサイド ActionScript リファレンスガイド // Create an XML document. var doc = new XML(); // Create three XML nodes by using createElement(). var element1 = doc.createElement("element1"); var element2 = doc.createElement("element2"); var element3 = doc.createElement("element3"); // Place the new nodes into the XML tree. doc.appendChild(element1); element1.appendChild(element2); element1.appendChild(element3); // Create two XML text nodes by using createTextNode(). var textNode1 = doc.createTextNode("textNode1"); var textNode2 = doc.createTextNode("textNode2"); // Place the new nodes into the XML tree. element2.appendChild(textNode1); element3.appendChild(textNode2); trace(doc); // Output (with line breaks added between tags): // //textNode1 //textNode2 // 関連項目 XML.createElement() XML.docTypeDecl my_xml.docTypeDecl XML ドキュメントの DOCTYPE 宣言についての情報を指定します。XML テキストが解析され XMLDocument オブジェ クトになると、XML オブジェクトの XML.docTypeDecl プロパティはその XML ドキュメントの DOCTYPE 宣言(例えば、 など)のテキストに設定されます。このプロパティは、XMLNode オブジェクト でなく DOCTYPE 宣言の文字列表現を使用して設定されます。 ActionScript の XML パーサーは、妥当性検証用パーサーではありません。DOCTYPE 宣言はパーサーにより読み取られ、 XML.docTypeDecl プロパティに格納されますが、DTD の妥当性検査は行われません。 解析中に DOCTYPE 宣言が見つからなかった場合、XML.docTypeDecl プロパティは undefined に設定されます。 XML.toString() メソッドは、XML.docTypeDecl の内容を、XML.xmlDecl に保存されている XML 宣言のすぐ後、XML オブ ジェクト内の他のテキストよりも前に出力します。XML.docTypeDecl が undefined である場合、DOCTYPE 宣言は出力され ません。 使用できるバージョン Flash Media Server 2 例 次の例では、XML.docTypeDecl プロパティを使用して、XML オブジェクトに DOCTYPE 宣言を設定します。 my_xml.docTypeDecl = ""; FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 136 サーバーサイド ActionScript リファレンスガイド XML.firstChild my_xml.firstChild 読み取り専用。指定された XML オブジェクトを評価し、親ノードの子リスト内の最初の子を参照します。ノードに子がな い場合、このプロパティは null です。ノードがテキストノードである場合、このプロパティは null です。このプロパティ は、子ノードを操作するためには使用できません。子ノードを操作するには、appendChild()、insertBefore() および removeNode() メソッドを使用します。 使用できるバージョン Flash Media Server 2 例 次の例では、XML.firstChild を使用してノードの子ノードをループ処理する方法を示します。 // Create a new XML document. var doc = new XML(); // Create a root node. var rootNode = doc.createElement("rootNode"); // Create three child nodes. var oldest = doc.createElement("oldest"); var middle = doc.createElement("middle"); var youngest = doc.createElement("youngest"); // Add the rootNode as the root of the XML document tree. doc.appendChild(rootNode); // Add each of the child nodes as children of rootNode. rootNode.appendChild(oldest); rootNode.appendChild(middle); rootNode.appendChild(youngest); // Use firstChild to iterate through the child nodes of rootNode. for (var aNode = rootNode.firstChild; aNode != null; aNode = aNode.nextSibling) { trace(aNode); } // // // // Output: XML.getBytesLoaded() my_xml.getBytesLoaded() XML ドキュメントに対してロード(ストリーム)されたバイト数を返します。getBytesLoaded() の値と getBytesTotal() の値 を比較すると、XML ドキュメントの何パーセントがロードされたかを判断できます。 使用できるバージョン Flash Media Server 2 戻り値 数値。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 137 サーバーサイド ActionScript リファレンスガイド 関連項目 XML.getBytesTotal() XML.getBytesTotal() my_xml.getBytesTotal() XML ドキュメントのサイズをバイト単位で返します。 使用できるバージョン Flash Media Server 2 戻り値 数値。 関連項目 136 ページの「XML.getBytesLoaded()」 XML.getNamespaceForPrefix() my_xml.getNamespaceForPrefix(prefix) ノードに指定された接頭辞に関連付けられている名前空間 URI を返します。URI を特定するために、 getPrefixForNamespace() は必要に応じて XML 階層をノードから上方向に検索し、特定の接頭辞に関連付けられている、最 初の xmlns 宣言の名前空間 URI を返します。 指定された接頭辞に対して定義されている名前空間がない場合は、null 値が返されます。 空の文字列("")を prefix として指定する場合、ノードに対して定義されているデフォルトの名前空間(例えば、 xmlns="http://www.example.com/")があると、このメソッドはデフォルトの名前空間 URI を返します。 使用できるバージョン Flash Media Server 2 パラメータ prefix 文字列。このメソッドが返す名前空間に関連付けられている接頭辞。 戻り値 文字列。 例 次の例では、非常に単純な XML オブジェクトを作成し、getNamespaceForPrefix() の呼び出しの結果を出力します。 function createXML() { var str = "" + "" + "" + "" + ""; return new XML(str).firstChild; } var xml = createXML(); trace(xml.getNamespaceForPrefix("exu")); // output: http://www.example.com/util trace(xml.getNamespaceForPrefix("")); // output: null FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 138 サーバーサイド ActionScript リファレンスガイド 関連項目 XML.getPrefixForNamespace() XML.getPrefixForNamespace() my_xml.getPrefixForNamespace(nsURI) ノードに指定された名前空間 URI に関連付けられている接頭辞を返します。接頭辞を特定するために、 getPrefixForNamespace() は必要に応じて XML 階層をノードから上方向に検索し、nsURI に一致する名前空間 URI に関連付 けられている、最初の xmlns 宣言の接頭辞を返します。 その URI に対応する xmlns 宣言がない場合、null が返されます。その URI に対応する xmlns 宣言があり、その宣言に関連 付けられている接頭辞がない場合は、空の文字列 ("") が返されます。 使用できるバージョン Flash Media Server 2 パラメータ nsURI 文字列。このメソッドが、関連付けられている接頭辞を返す名前空間 URI。 戻り値 文字列。 例 次の例では、非常に単純な XML オブジェクトを作成し、getPrefixForNamespace() メソッドの呼び出しの結果を出力します。 Outer XML ノードは、xmlDoc 変数で表され、名前空間 URI を定義し、その URI を exu 接頭辞に関連付けます。定義済み の名前空間 URI("http://www.example.com/util")を指定して getPrefixForNamespace() を呼び出すと、接頭辞 exu が返さ れますが、未定義の URI("http://www.example.com/other")を指定してこのメソッドを呼び出すと、null が返されます。 最初の exu:Child ノードも、child1 変数によって表され、名前空間 URI("http://www.example.com/child")を定義します が、その URI を接頭辞に関連付けません。定義されているが接頭辞に関連付けられていない名前空間 URI を指定してこのメ ソッドを呼び出すと、空の文字列が返されます。 function createXML() { var str = "" + "" + "" + "" + ""; return new XML(str).firstChild; } var xmlDoc = createXML(); trace(xmlDoc.getPrefixForNamespace("http://www.example.com/util")); // output: exu trace(xmlDoc.getPrefixForNamespace("http://www.example.com/other")); // output: null var child1 = xmlDoc.firstChild; trace(child1.getPrefixForNamespace("http://www.example.com/child")); // output: [empty string] trace(child1.getPrefixForNamespace("http://www.example.com/other")); // output: null 関連項目 XML.getNamespaceForPrefix() FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 139 サーバーサイド ActionScript リファレンスガイド XML.hasChildNodes() my_xml.hasChildNodes() 指定された XML オブジェクトに子ノードがある場合は true を、それ以外の場合は false を返します。 使用できるバージョン Flash Media Server 2 戻り値 ブール値。 例 次の例では、新しい XML パケットを作成します。このコードは、ルートノードに子ノードがある場合は各子ノードをルー プして、そのノードの名前と値を表示します。 var my_xml = new XML("hankrudolph"); if (my_xml.firstChild.hasChildNodes()) { // Use firstChild to iterate through the child nodes of rootNode. for (var aNode = my_xml.firstChild.firstChild; aNode != null; aNode=aNode.nextSibling) { if (aNode.nodeType == 1) { trace(aNode.nodeName+":\t"+aNode.firstChild.nodeValue); } } } 上記の結果は次のように出力されます。 username:hank password:rudolph XML.ignoreWhite my_xml.ignoreWhite XML.prototype.ignoreWhite true に設定すると、空白のみを含むテキストノードは解析処理中に破棄されます。デフォルト設定は、false です。先行空白 または後続空白があるテキストノードは影響を受けません。 シンタックス 1:次のコードに示すように、XML オブジェクトごとに ignoreWhite プロパティを設定できます。 my_xml.ignoreWhite = true; シンタックス 2:次のコードに示すように、XML オブジェクトにデフォルトの ignoreWhite プロパティを設定できます。 XML.prototype.ignoreWhite = true; 使用できるバージョン Flash Media Server 2 例 次の例では、空白のみのテキストノードが含まれる XML ファイルをロードします。foyer タグには 14 個の空白キャラクタ が含まれています。この例を実行するには、flooring.xml という名前のテキストファイルを作成し、そのファイルに次のタ グをコピーします。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 140 サーバーサイド ActionScript リファレンスガイド ceramic tile linoleum 次の例はサーバーサイドコードを示しています。 // Create a new XML object. var flooring = new XML(); // Set the ignoreWhite property to true (the default value is false). flooring.ignoreWhite = true; // After loading is complete, trace the XML object. flooring.onLoad = function(success) { trace(flooring); } // Load the XML into the flooring object. flooring.load("flooring.xml"); /* output (line breaks added for clarity): ceramic tile linoleum */ flooring.ignoreWhite の設定を false に変更するか、単にそのコード行全体を削除する場合、foyer タグの 14 個の空白キャラク タは削除されません。 ... // Set the ignoreWhite property to false (the default value). flooring.ignoreWhite = false; ... /* output (line breaks added for clarity): ceramic tile linoleum */ XML.insertBefore() my_xml.insertBefore(childNode, beforeNode) XML オブジェクトの子リスト内の beforeNode ノードの前に新しい子ノードを挿入します。beforeNode ノードが my_xml の 子でない場合、挿入は失敗します。 使用できるバージョン Flash Media Server 2 パラメータ childNode 挿入される XMLNode オブジェクト。 beforeNode childNode ノードの挿入ポイントの前にある XMLNode オブジェクト。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 141 サーバーサイド ActionScript リファレンスガイド 戻り値 成功した場合はブール値 true、失敗した場合は false。 例 次の例は、XML.cloneNode() の例の抜粋です。 // Create a copy of the middle node by using cloneNode(). var middle2 = middle.cloneNode(false); // Insert the clone node into rootNode // between the middle and youngest nodes. rootNode.insertBefore(middle2, youngest); XML.lastChild my_xml.lastChild 読み取り専用。ノードの子リスト内の最後の子を参照する XMLNode 値です。ノードに子がない場合、XML.lastChild プロ パティは null です。このプロパティは、子ノードを操作するためには使用できません。子ノードを操作するには、 appendChild()、insertBefore() および removeNode() メソッドを使用します。 使用できるバージョン Flash Media Server 2 例 次の例では、XML.lastChild プロパティを使用して XMLNode オブジェクトの子ノードで繰り返し処理を実行します。この 処理は、ノードの子リストの最後の項目から始まり、ノードの子リストの最初の子で終了します。 // Create a new XML document. var doc = new XML(); // Create a root node. var rootNode = doc.createElement("rootNode"); // Create three child nodes. var oldest = doc.createElement("oldest"); var middle = doc.createElement("middle"); var youngest = doc.createElement("youngest"); // Add the rootNode as the root of the XML document tree. doc.appendChild(rootNode); // Add each of the child nodes as children of rootNode. rootNode.appendChild(oldest); rootNode.appendChild(middle); rootNode.appendChild(youngest); // Use lastChild to iterate through the child nodes of rootNode. for (var aNode = rootNode.lastChild; aNode != null; aNode = aNode.previousSibling) { trace(aNode); } /* output: */ FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 142 サーバーサイド ActionScript リファレンスガイド 次の例では、新しい XML パケットを作成し、XML.lastChild プロパティを使用して、ルートノードの子ノードで繰り返し処 理を実行します。 // Create a new XML document. var doc = new XML(""); var rootNode = doc.firstChild; // Use lastChild to iterate through the child nodes of rootNode. for (var aNode = rootNode.lastChild; aNode != null; aNode=aNode.previousSibling) { trace(aNode); } /* output: */ XML.load() my_xml.load(url) File オブジェクトからまたは HTTP の URL から XML ドキュメントをロードし、指定された XML オブジェクトの内容を XML データで置き換えます。ロード処理は非同期です。このため、load() メソッドの実行が完了しても、すぐには処理は終 了しません。 load() メソッドを実行すると、XML オブジェクトの loaded プロパティが false に設定されます。XML データのダウンロー ドが終了すると、loaded プロパティが true に設定され、onLoad() イベントハンドラが呼び出されます。XML データは、完 全にダウンロードされるまで解析されません。XML オブジェクトに XML ツリーが既に含まれていた場合、その XML ツ リーは破棄されます。 カスタム関数を定義して、XML オブジェクトの onLoad() イベントハンドラが呼び出されたときに実行することができま す。 使用できるバージョン Flash Media Server 2 パラメータ url ロードする XML ドキュメントが置かれている場所の File オブジェクトまたは URL。呼び出し元の SWF ファイルが Web ブラウザで実行されている場合、url は SWF ファイルと同じドメインに属している必要があります。このパラメータ に対してファイルパスを使用することはできません。 戻り値 成功した場合はブール値 true、失敗した場合は false。 例 次の単純な例では、XML.load() メソッドを使用しています。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 143 サーバーサイド ActionScript リファレンスガイド // Create a new XML object. var flooring = new XML(); // Set the ignoreWhite property to true (the default value is false). flooring.ignoreWhite = true; // After loading is complete, trace the XML object. flooring.onLoad = function(success) { trace(flooring); }; // Load the XML into the flooring object. flooring.load("http://somehttpserver/flooring.xml"); flooring.xml ファイルの内容と、この例で生成される結果については、XML.ignoreWhite の例を参照してください。 XML.loaded my_xml.loaded ブール値。XML.load() 呼び出しによって開始されたドキュメントのロード処理が正常に完了した場合は true、それ以外の場 合は false。 使用できるバージョン Flash Media Server 2 例 次の例では、簡単なスクリプトで XML.loaded プロパティを使用します。 var my_xml = new XML(); my_xml.ignoreWhite = true; my_xml.onLoad = function(success) { trace("success: "+success); trace("loaded:"+my_xml.loaded); trace("status:"+my_xml.status); }; my_xml.load("http://www.flash-mx.com/mm/problems/products.xml"); onLoad() ハンドラが呼び出されると、ログファイルに情報が書き込まれます。呼び出しが正常に完了すると、次の例に示す とおり、loaded ステータスの true がログファイルに書き込まれます。 success:true loaded:true status:0 XML.localName my_xml.localName 読み取り専用。XML ノード名のローカル名部分。名前空間の接頭辞を除いたエレメント名です。例えば、ノード [email protected] には、ローカル名 mailbox と接頭辞 contact があり、この 2 つで完全 なエレメント名 contact.mailbox が構成されます。 名前空間の接頭辞には、XML ノードオブジェクトの XML.prefix プロパティによってアクセスできます。XML.nodeName プ ロパティは、接頭辞とローカル名を含む完全な名前を返します。 使用できるバージョン Flash Media Server 2 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 144 サーバーサイド ActionScript リファレンスガイド 例 この例では、同じディレクトリに格納されている SWF ファイルと XML ファイルを使用します。SoapSample.xml という 名前の XML ファイルには、次のコードが含まれています。 San Francisco SWF ファイルのソースには、次のスクリプトが含まれています ( 出力文字列のコメントに注意 )。 var xmlDoc = new XML() xmlDoc.ignoreWhite = true; xmlDoc.load("http://www.example.com/SoapSample.xml") xmlDoc.onLoad = function(success) { var tempNode = xmlDoc.childNodes[0].childNodes[0].childNodes[0]; trace("w:GetTemperature localname: " + tempNode.localName); // Output: ... GetTemperature var soapEnvNode = xmlDoc.childNodes[0]; trace("soap:Envelope localname: " + soapEnvNode.localName); // Output: ... Envelope }; 関連項目 XML.nodeName、XML.prefix XML.namespaceURI my_xml.namespaceURI 読み取り専用。XML ノードに接頭辞が付いている場合、xmlns はその接頭辞(URI)の xmlns 宣言の値となります。これ は通常、名前空間 URI と呼ばれます。xmlns 宣言は、現在のノードか、XML 階層でそれより上位のノードにあります。 XML ノードに接頭辞が付いていない場合、namespaceURI プロパティの値は、定義済みのデフォルトの名前空間(例えば、 xmlns="http://www.example.com/")があるかどうかによって異なります。デフォルト名前空間がある場合、namespaceURI プ ロパティの値はデフォルトの名前空間の値です。デフォルトの名前空間がない場合、そのノードの namespaceURI プロパ ティは空の文字列 ("") です。 XML.getNamespaceForPrefix() メソッドを使用すると、特定の接頭辞に関連付けられている名前空間を特定できます。 namespaceURI プロパティは、ノード名に関連付けられている接頭辞を返します。 使用できるバージョン Flash Media Server 2 例 次の例では、接頭辞の使用によって namespaceURI プロパティがどのように変わるのかを示します。この例で使用されてい る SoapSample.xml という名前の XML ファイルには、次のタグが含まれています。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 145 サーバーサイド ActionScript リファレンスガイド San Francisco サーバーサイド ActionScript Communication ファイル(ASC ファイル)のソースには、次のスクリプトが含まれていま す(出力文字列のコメントに注意)。tempNode の場合、これは w:GetTemperature ノードを表し、namespaceURI の値は soap:Body タグで定義されます。soapBodyNode の場合、これは soap:Body ノードを表し、namespaceURI の値は、1 つ上の ノードの soap 接頭辞の定義によって決まります。soap:Body ノードの w 接頭辞の定義によっては決まりません。 var xmlDoc = new XML(); xmlDoc.load("http://www.example.com/SoapSample.xml"); xmlDoc.ignoreWhite = true; xmlDoc.onLoad = function(success:Boolean) { var tempNode:XMLNode = xmlDoc.childNodes[0].childNodes[0].childNodes[0]; trace("w:GetTemperature namespaceURI: " + tempNode.namespaceURI); // Output: ... http://www.example.com/weather trace("w:GetTemperature soap namespace: " + tempNode.getNamespaceForPrefix("soap")); // Output: ... http://www.w3.org/2001/12/soap-envelope var soapBodyNode = xmlDoc.childNodes[0].childNodes[0]; trace("soap:Envelope namespaceURI: " + soapBodyNode.namespaceURI); // Output: ... http://www.w3.org/2001/12/soap-envelope }: 次の例では、接頭辞の付いていない XML タグを使用します。この例では、同じディレクトリに格納されている SWF ファ イルと XML ファイルを使用しています。NoPrefix.xml という名前の XML ファイルには、次のタグが含まれています。 サーバーサイドのスクリプトファイルのソースには、次のコードが含まれています ( 出力文字列のコメントに注意 )。 rootNode ノードはデフォルトの名前空間を定義していないので、その namespaceURI 値は空の文字列です。simpleNode ノー ドはデフォルトの名前空間を定義しているため、その namespaceURI 値はデフォルトの名前空間です。innerNode ノードは デフォルトの名前空間を定義していませんが、simpleNode によって定義されるデフォルトの名前空間を使用します。そのた め、namespaceURI 値は simpleNode 値と同じです。 var xmlDoc = new XML() xmlDoc.load("http://www.example.com/NoPrefix.xml"); xmlDoc.ignoreWhite = true; xmlDoc.onLoad = function(success) { var rootNode = xmlDoc.childNodes[0]; trace("rootNode Node namespaceURI: " + rootNode.namespaceURI); // Output: [empty string] var simpleNode = xmlDoc.childNodes[0].childNodes[0]; trace("simpleNode Node namespaceURI: " + simpleNode.namespaceURI); // Output: ... http://www.w3.org/2001/12/soap-envelope var innerNode = xmlDoc.childNodes[0].childNodes[0].childNodes[0]; trace("innerNode Node namespaceURI: " + innerNode.namespaceURI); // Output: ... http://www.w3.org/2001/12/soap-envelope }; FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 146 サーバーサイド ActionScript リファレンスガイド XML.nextSibling my_xml.nextSibling 読み取り専用。親ノードの子リスト内の次の子ノードを参照する XMLNode 値。ノードに次の子ノードがない場合、この プロパティは null です。このプロパティは、子ノードを操作するためには使用できません。子ノードを操作するには、 appendChild()、insertBefore() および removeNode() メソッドを使用します。 使用できるバージョン Flash Media Server 2 例 以下は、XML.firstChild プロパティの例から抜粋したものです。この例では、XML.nextSibling プロパティを使用して XMLNode オブジェクトの子ノードをループ処理する方法を示します。 for (var aNode = rootNode.firstChild; aNode != null; aNode = aNode.nextSibling) { trace(aNode); } XML.nodeName my_xml.nodeName XML オブジェクトのノード名を表す文字列。XML オブジェクトが XML エレメントである場合 (nodeType==1)、 nodeName は XML ファイル内のノードを表すタグの名前です。例えば、TITLE は HTML TITLE タグのノード名です。 XML オブジェクトがテキストノードである (nodeType==3) 場合、nodeName は null です。 使用できるバージョン Flash Media Server 2 例 次の例では、エレメントノードとテキストノードを作成し、それぞれのノード名をチェックします。 // Create an XML document. var doc = new XML(); // Create an XML node by using createElement(). var myNode = doc.createElement("rootNode"); // Place the new node into the XML tree. doc.appendChild(myNode); // Create an XML text node by using createTextNode(). var myTextNode = doc.createTextNode("textNode"); // Place the new node into the XML tree. myNode.appendChild(myTextNode); trace(myNode.nodeName); trace(myTextNode.nodeName); /* output: rootNode null */ FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 147 サーバーサイド ActionScript リファレンスガイド 次の例では、新しい XML パケットを作成します。このコードは、ルートノードに子ノードがある場合は各子ノードをルー プして、そのノードの名前と値を表示します。AS ファイルに次の ActionScript を追加します。 var my_xml = new XML("hankrudolph"); if (my_xml.firstChild.hasChildNodes()) { // Use firstChild to iterate through the child nodes of rootNode. for (var aNode = my_xml.firstChild.firstChild; aNode != null; aNode=aNode.nextSibling) { if (aNode.nodeType == 1) { trace(aNode.nodeName+":\t"+aNode.firstChild.nodeValue); } } } 次のノード名が表示されます。 username:hank password:rudolph XML.nodeType my_xml.nodeType 読み取り専用。nodeType の値。XML エレメントの場合は 1、テキストノードの場合は 3 になります。 nodeType プロパティは、www.w3.org にある Document Object Model Level 1 勧告の NodeType 列挙値の数値です。次 の表は、これらの値の一覧です。 整数値 定義されている定数 1 ELEMENT_NODE 2 ATTRIBUTE_NODE 3 TEXT_NODE 4 CDATA_SECTION_NODE 5 ENTITY_REFERENCE_NODE 6 ENTITY_NODE 7 PROCESSING_INSTRUCTION_NODE 8 COMMENT_NODE 9 DOCUMENT_NODE 10 DOCUMENT_TYPE_NODE 11 DOCUMENT_FRAGMENT_NODE 12 NOTATION_NODE Flash Player に組み込まれている XML クラスがサポートするのは 1(ELEMENT_NODE)と 3(TEXT_NODE)だけです。 使用できるバージョン Flash Media Server 2 例 次の例では、エレメントノードとテキストノードを作成し、それぞれのノードタイプをチェックします。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 148 サーバーサイド ActionScript リファレンスガイド // Create an XML document. var doc = new XML(); // Create an XML node by using createElement(). var myNode = doc.createElement("rootNode"); // Place the new node into the XML tree. doc.appendChild(myNode); // Create an XML text node by using createTextNode(). var myTextNode = doc.createTextNode("textNode"); // Place the new node into the XML tree. myNode.appendChild(myTextNode); trace(myNode.nodeType); trace(myTextNode.nodeType); /* output: 1 3 */ XML.nodeValue my_xml.nodeValue XML オブジェクトのノード値。XML オブジェクトがテキストノードである場合、nodeType は 3 であり、nodeValue はノー ドのテキストです。XML オブジェクトが XML エレメントである(nodeType が 1)場合、nodeValue は null で、読み取り 専用です。 使用できるバージョン Flash Media Server 2 例 次の例では、エレメントノードとテキストノードを作成し、それぞれのノード値をチェックします。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 149 サーバーサイド ActionScript リファレンスガイド // Create an XML document. var doc = new XML(); // Create an XML node by using createElement(). var myNode = doc.createElement("rootNode"); // Place the new node into the XML tree. doc.appendChild(myNode); // Create an XML text node by using createTextNode(). var myTextNode = doc.createTextNode("myTextNode"); // Place the new node into the XML tree. myNode.appendChild(myTextNode); trace(myNode.nodeValue); trace(myTextNode.nodeValue); /* output: null myTextNode */ 次の例では、XML パケットを作成して解析します。このコードは各子ノードをループ処理し、firstChild プロパティと firstChild.nodeValue を使用してノード値を表示します。 var my_xml = new XML("mortongood&evil"); trace("using firstChild:"); for (var i = 0; i> " + this.httpStatusType + ": " + this.httpStatus); if(src != undefined) { this.parseXML(src); this.loaded = true; this.onLoad(true); } else { this.onLoad(false); } }; myXml.onLoad = function(success) { // Insert code here. } myXml.load("http://weblogs.macromedia.com/mxna/xml/rss.cfm?query=byMostRecent&languages=1"); 関連項目 LoadVars.onHTTPStatus()、XML.send()、XML.sendAndLoad() XML.onLoad() my_xml.onLoad = function (success) {} サーバーから XML ドキュメントが受信されると呼び出されます。XML ドキュメントが正常に受信された場合、success パ ラメータは true です。ドキュメントが受信されなかったか、サーバーから応答を受信する際にエラーが発生した場合は、 success パラメータは false です。デフォルトでは、このメソッドの実行形態は非アクティブになります。デフォルトの実行 形態を無効にするには、カスタムアクションを含む関数を割り当てます。 使用できるバージョン Flash Media Server 2 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 152 サーバーサイド ActionScript リファレンスガイド パラメータ success ブール値。XML.load() または XML.sendAndLoad() 操作によって XML オブジェクトが正常にロードされた場合は true、それ以外の場合は false。 例 次の例には、簡単な電子商取引店頭アプリケーション用の ActionScript が含まれています。sendAndLoad() メソッドは、 ユーザーの名前とパスワードを含む XML エレメントを転送し、XML.onLoad() ハンドラを使用してサーバーからの応答を処 理します。 var login_str = ""; var my_xml = new XML(login_str); var myLoginReply_xml = new XML(); myLoginReply_xml.ignoreWhite = true; myLoginReply_xml.onLoad = function(success){ if (success) { if ((myLoginReply_xml.firstChild.nodeName == "packet") && (myLoginReply_xml.firstChild.attributes.success == "true")) { gotoAndStop("loggedIn"); } else { gotoAndStop("loginFailed"); } } else { gotoAndStop("connectionFailed"); } }; my_xml.sendAndLoad("http://www.flash-mx.com/mm/login_xml.cfm", myLoginReply_xml); 関連項目 XML.load()、XML.sendAndLoad() XML.parentNode my_xml.parentNode 読み取り専用。指定された XML オブジェクトの親ノードを参照する XMLNode 値。ノードに親がない場合は null を返し ます。このプロパティは、子ノードを操作するためには使用できません。子ノードを操作するには、appendChild()、 insertBefore() および removeNode() メソッドを使用します。 使用できるバージョン Flash Media Server 2 例 次の例では、XML パケットを作成し、username ノードの親ノードをログファイルに書き込みます。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 153 サーバーサイド ActionScript リファレンスガイド var my_xml = new XML("mortongood&evil"); // The first child is the node. var rootNode = my_xml.firstChild; // The first child of the root is the node. var targetNode = rootNode.firstChild; trace("the parent node of '"+targetNode.nodeName+"' is: "+targetNode.parentNode.nodeName); trace("contents of the parent node are:\n"+targetNode.parentNode); /* output (line breaks added for clarity): the parent node of 'username' is: login contents of the parent node are: morton good&evil */ XML.parseXML() my_xml.parseXML(source) source パラメータで指定された XML テキストを解析し、指定された XML オブジェクトに XML ツリーを設定します。 XML オブジェクト内の既存のツリーはすべて破棄されます。 使用できるバージョン Flash Media Server 2 パラメータ source 文字列。解析後に指定の XML オブジェクトに渡される XML テキスト。 戻り値 ブール値。成功した場合は true、失敗した場合は false。 例 次の例では、XML パケットを作成して解析します。 var xml_str = "San Francisco" // Defining the XML source within the XML constructor: var my1_xml = new XML(xml_str); trace(my1_xml.firstChild.attributes.name); // output: California // Defining the XML source by using the XML.parseXML method: var my2_xml = new XML(); my2_xml.parseXML(xml_str); trace(my2_xml.firstChild.attributes.name); // output: California XML.prefix my_xml.prefix FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 154 サーバーサイド ActionScript リファレンスガイド 読み取り専用。XML ノード名の接頭辞部分。例えば、[email protected] ノードには、 接頭辞 contact とローカル名 mailbox があり、それらによって完全なエレメント名 contact.mailbox が構成されます。 使用できるバージョン Flash Media Server 2 例 サーバーサイドスクリプトファイルと XML ファイルは同じディレクトリに格納されています。SoapSample.xml という名 前の XML ファイルには、次のコードが含まれています。 San Francisco サーバーサイドスクリプトファイルのソースには、次のコードが含まれています ( 出力文字列のコメントに注意 )。 var xmlDoc = new XML(); xmlDoc.ignoreWhite = true; xmlDoc.load("http://www.example.com/SoapSample.xml"); xmlDoc.onLoad = function(success) { var tempNode = xmlDoc.childNodes[0].childNodes[0].childNodes[0]; trace("w:GetTemperature prefix: " + tempNode.prefix); // Output: ... w var soapEnvNode = xmlDoc.childNodes[0]; trace("soap:Envelope prefix: " + soapEnvNode.prefix); // Output: ... soap }; XML.previousSibling my_xml.previousSibling 読み取り専用。親ノードの子リスト内の前の子ノードを参照する XMLNode 値。ノードに前の子ノードがない場合は、null を返します。このプロパティは子ノードの操作には使用できません。子ノードを操作するには、XML.appendChild() メソッ ド、XML.insertBefore() メソッドおよび XML.removeNode() メソッドを使用します。 使用できるバージョン Flash Media Server 2 例 次の例で、XML.lastChild プロパティの例から抜粋したものです。この例では、XML.previousSibling プロパティを使用して XMLNode オブジェクトの子ノードをループ処理する方法を示します。 for (var aNode = rootNode.lastChild; aNode != null; aNode = aNode.previousSibling) { trace(aNode); } XML.removeNode() my_xml.removeNode() 指定した XML オブジェクトをその親から削除し、そのノードのすべての子孫を削除します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 155 サーバーサイド ActionScript リファレンスガイド 使用できるバージョン Flash Media Server 2 例 次の例では、XML パケットを作成し、指定された XML オブジェクトとその子孫ノードを削除します。 var xml_str = "San Francisco"; var my_xml = new XML(xml_str); var cityNode = my_xml.firstChild.firstChild; trace("before XML.removeNode():\n"+my_xml); cityNode.removeNode(); trace("after XML.removeNode():\n"+my_xml); /* output (line breaks added for clarity): before XML.removeNode(): San Francisco after XML.removeNode(): */ XML.send() my_xml.send(url, [fileObj]) 指定された XML オブジェクトを XML ドキュメントにエンコードし、ブラウザで POST メソッドを使用して、指定された URL に送信しま す。 Flash のテスト環境では、GET メソッドのみを使用します。 このメソッドは非同期です。XML.onData() ハンドラでは、応答で受信されたデータを処理することができます。 使用できるバージョン Flash Media Server 2 戻り値 ブール値。成功した場合は true、失敗した場合は false。 パラメータ url 指定した XML オブジェクトの宛先 URL を示す文字列。 fileObj 読み取り専用ではなく、応答が書き込まれる File オブジェクト。File オブジェクトが開いていない場合、Flash Media Interactive Server はファイルを開き、書き込みを実行し、ファイルを閉じます。File オブジェクトが開いている場 合、Flash Media Interactive Server はファイルに書き込み、ファイルを開けたままにしておきます。このパラメータはオプ ションです。 例 次の例では、XML パケットを定義し、XML オブジェクトのコンテンツタイプを設定します。データはサーバーに送信され ます。結果は File オブジェクトに書き込まれます。データは onData ハンドラによって呼び出されるカスタム解析関数で解 析されます。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 156 サーバーサイド ActionScript リファレンスガイド var my_xml = new XML("Ernie13045"); my_xml.contentType = "text/xml"; my_xml.send("http://www.flash-mx.com/mm/highscore.cfm", myFile); my_xml.onData = function(data) { //custom parsing function } 関連項目 XML.onData() XML.sendAndLoad() my_xml.sendAndLoad(url, targetXMLobject) 指定された XML オブジェクトを XML ドキュメントにエンコードし、HTTP POST メソッドを使用して、指定された URL に送信します。 また、サーバーの応答をダウンロードして、targetXMLobject オブジェクトにロードします。サーバーの応答は、XML.load() メソッドで使用される方法と同じ方法でロードされます。 sendAndLoad() を実行すると、loaded プロパティが false に設定されます。XML データのロードが正常に実行されると、 onLoad() イベントハンドラが開始されます。XML データは、完全にダウンロードされるまで解析されません。XML オブ ジェクトに XML ツリーが既に含まれていた場合、その XML ツリーは破棄されます。 このメソッドは非同期です。XML.onData() ハンドラでは、応答で受信されたデータを処理することができます。 使用できるバージョン Flash Media Server 2 パラメータ url 指定した XML オブジェクトの宛先 URL を示す文字列。呼び出し元の SWF ファイルが Web ブラウザで実行されてい る場合、url パラメータは SWF ファイルと同じドメインに属している必要があります。 targetXMLobject XML コンストラクタメソッドで作成された XML オブジェクトで、このオブジェクトはサーバーから返 される情報を受信します。 戻り値 ブール値。成功した場合は true、失敗した場合は false。 関連項目 XML.onData() XML.status my_xml.status XML ドキュメントが XML オブジェクトに正常に解析されたかどうかを示す数値。次の表は、数値ステータスコードとそ の説明を示しています。 ステータスコード 説明 0 エラーなし。解析が正常に終了しました。 -2 CDATA セクションが適切に終了されていません。 -3 XML 宣言が適切に終了されていません。 -4 DOCTYPE 宣言が適切に終了されていません。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 157 サーバーサイド ActionScript リファレンスガイド ステータスコード 説明 -5 コメントが適切に終了されていません。 -6 XML エレメントの形式が正しくありません。 -7 メモリ不足です。 -8 属性値が適切に終了されていません。 -9 開始タグに対応する終了タグがありません。 -10 対応する開始タグのない終了タグが見つかりました。 使用できるバージョン Flash Media Server 2 例 次の例では、SWF ファイルに XML パケットをロードします。ステータスメッセージは、XML のロードと解析が成功した かどうかを示します。 var my_xml = new XML(); my_xml.onLoad = function(success) { if (success) { if (my_xml.status == 0) { trace("XML was loaded and parsed successfully"); } else { trace("XML was loaded successfully, but was unable to be parsed."); } var errorMessage; switch (my_xml.status) { case 0 : errorMessage = "No error; parse was completed successfully."; break; case -2 : errorMessage = "A CDATA section was not properly terminated."; break; case -3 : errorMessage = "The XML declaration was not properly terminated."; break; case -4 : errorMessage = "The DOCTYPE declaration was not properly terminated."; break; case -5 : errorMessage = "A comment was not properly terminated."; break; case -6 : errorMessage = "An XML element was malformed."; break; case -7 : errorMessage = "Out of memory."; break; FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 158 サーバーサイド ActionScript リファレンスガイド case -8 : errorMessage = "An attribute value was not properly terminated."; break; case -9 : errorMessage = "A start tag was not matched with an end tag."; break; case -10 : errorMessage = "An end tag was encountered without a matching start tag."; break; default : errorMessage = "An unknown error has occurred."; break; } trace("status: "+my_xml.status+" ("+errorMessage+")"); } else { trace("Unable to load/parse XML. (status: "+my_xml.status+")"); } }; my_xml.load("http://www.flash-mx.com/mm/badxml.xml"); XML.toString() my_xml.toString() 指定された XML オブジェクトを評価し、ノード、子および属性を含む XML 構造体のテキスト表現を作成し、結果を文字 列として返します。 トップレベルの XML オブジェクト(コンストラクタで作成されたオブジェクト)の場合は、XML.toString() メソッドがド キュメントの XML 宣言(保存場所は XML.xmlDecl プロパティ)を出力し、その後にドキュメントの DOCTYPE 宣言(保存 場所は XML.docTypeDecl プロパティ)、さらにオブジェクト内のすべての XML ノードのテキスト表現と続きます。 XML.xmlDecl プロパティが undefined である場合、XML 宣言は出力されません。XML.docTypeDecl プロパティが undefined である場合、DOCTYPE 宣言は出力されません。 使用できるバージョン Flash Media Server 2 戻り値 文字列。 例 次の例の XML.toString() メソッドは、ログファイルに

test

を送信します。 var node = new XML("

test

"); trace(node.toString()); XML.xmlDecl my_xml.xmlDecl ドキュメントの XML 宣言についての情報を指定します。XML ドキュメントが XML オブジェクトに解析された後、この プロパティはドキュメントの XML 宣言のテキストに設定されます。このプロパティは、XMLNode オブジェクトでなく XML 宣言の文字列表現を使用して設定されます。解析中に XML 宣言が見つからなかった場合、プロパティは undefined.XML に設定されます。XML.toString() メソッドは、XML オブジェクト内の他のテキストの前に、XML.xmlDecl プ ロパティの内容を出力します。XML.xmlDecl プロパティに undefined タイプが含まれている場合、XML 宣言は出力されま せん。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 159 サーバーサイド ActionScript リファレンスガイド 使用できるバージョン Flash Media Server 2 例 次の例では、XML ファイルをロードし、ファイルについての情報を出力します。 var my_xml = new XML(); my_xml.ignoreWhite = true; my_xml.onLoad = function(success){ if (success){ trace("xmlDecl: " + my_xml.xmlDecl); trace("contentType: " + my_xml.contentType); trace("docTypeDecl: " + my_xml.docTypeDecl); trace("packet: " + my_xml.toString()); } else { trace("Unable to load remote XML."); } }; my_xml.load("http://foo.com/crossdomain.xml"); 関連項目 XML.docTypeDecl、XML.toString() XMLSocket クラス XMLSocket クラスでは、Flash Media Interactive Server が IP アドレスまたはドメイン名で識別されるサーバーと通信す るためのクライアントソケットを実装します。XMLSocket クラスは、リアルタイムのチャットシステムなど待ち時間を短く することが求められるクライアント / サーバーアプリケーションに適しています。従来の HTTP ベースによるチャットソ リューションでは、サーバーへのポーリング処理を頻繁に実行し、HTTP 要求を使用して新しいメッセージをダウンロード します。それに対して、XMLSocket チャットソリューションはサーバーに対して開いた接続を維持するため、サーバーは クライアントから要求を受けずにただちに着信メッセージを送ることができます。 注意:XMLSocket クラスを使用して、XMLStreams オブジェクトを作成することもできます。160 ページの 「XMLSocket コンストラクタ」および 165 ページの「XMLStreams クラス」を参照してください。 XMLSocket クラスを使用するには、サーバーコンピュータはこのクラスで使用されるプロトコルに対応したデーモンを実 行する必要があります。このプロトコルには次の特性があります。 • XML メッセージは、全二重 TCP/IP ストリームソケット接続を介して送られます。 • 各 XML メッセージは、ゼロ (0) バイトで終了する完全な XML ドキュメントです。 • 1 つの XMLSocket 接続を使用して送受信できる XML メッセージの数に制限はありません。 XMLSocket オブジェクトがサーバーに接続する方法と場所については、次の制限があります。 • XMLSocket.connect() メソッドが接続できる TCP ポートの番号は、1024 以上です。この制限により、XMLSocket オブ ジェクトと通信するサーバーデーモンにも、1024 以上のポート番号を割り当てる必要があります。1024 未満のポート番 号は、FTP、Telnet、HTTP などのシステムサービスによって使用されることが多いため、XMLSocket オブジェクト はセキュリティ上の理由からこれらのポートにアクセスできません。ポート番号の制限により、これらのリソースが不適 切にアクセスされたり、乱用される可能性が少なくなります。 XMLSocket クラスのメソッドを使用するには、まず new XMLSocket() コンストラクタを使用して XMLSocket オブジェク トを作成する必要があります。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 160 サーバーサイド ActionScript リファレンスガイド 使用できるバージョン Flash Media Server 2 プロパティ一覧 プロパティ 説明 XMLSocket 接続が閉じる前に、(終了タグを受信することなく)XML サーバーから受信できる文字 XMLSocket.maxUnprocessedChars 数。 メソッド一覧 メソッド 説明 XMLSocket.close() XMLSocket オブジェクトで指定された接続を閉じます。 XMLSocket.connect() 指定された TCP ポート(1024 以上)を使用して指定されたインターネットホストへの接続を確立し、接続が正常 に確立されたかどうかにより true または false を返します。 XMLSocket.send() object パラメータで指定された XML オブジェクトまたはデータを文字列に変換し、その後ろにゼロ (0) バイトを付 加してサーバーに転送します。 イベントハンドラ一覧 イベントハンドラ 説明 XMLSocket.onClose() 開いた接続がサーバーによって閉じられたときに呼び出されます。 XMLSocket.onConnect() XMLSocket.connect() で開始した接続要求が成功したか失敗したときに、Flash Media Interactive Server に よって呼び出されます。 XMLSocket.onData() XMLSocket.onXML() ゼロ(0)バイトで終了するメッセージがサーバーからダウンロードされると、呼び出されます。 XML ドキュメントを含む指定された XML オブジェクトが、開いている XMLSocket 接続を通して到達したとき に呼び出されます。 XMLSocket コンストラクタ new XMLSocket(streamOrFlash) 新しい XMLSocket オブジェクト("flash")または新しい XMLStreams オブジェクト("stream")を作成します。初期状態 では、XMLSocket オブジェクトおよび XMLStreams オブジェクトはサーバーに接続されません。オブジェクトをサー バーに接続するには、XMLSocket.connect() を呼び出す必要があります。 XMLStreams クラスの詳細については、165 ページの「XMLStreams クラス」を参照してください。 使用できるバージョン Flash Communication Server 1.5 パラメータ streamOrFlash このオブジェクトが XMLSocket オブジェクトであるか XMLStreams オブジェクトであるかを示す文字列。 このパラメータは、"flash" または "stream" のいずれかの値をとることができます。 戻り値 XMLSocket オブジェクトまたは XMLStreams オブジェクトへの参照。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 161 サーバーサイド ActionScript リファレンスガイド 例 次の例では、XMLSocket オブジェクトを作成します。 var socket = new XMLSocket("flash"); 次の例では、XMLStreams オブジェクトを作成します。 var stream = new XMLSocket("stream"); XMLSocket.close() myXMLSocket.close() XMLSocket オブジェクトで指定された接続を閉じます。 使用できるバージョン Flash Media Server 2 例 次の簡単な例では、XMLSocket オブジェクトを作成し、サーバーへの接続を行ってから、接続を閉じます。 var socket = new XMLSocket(); socket.connect(null, 2000); socket.close(); XMLSocket.connect() myXMLSocket.connect(host, port) 指定された TCP ポート(1024 以上)を使用して指定されたインターネットホストへの接続を確立し、接続が正常に確立さ れたかどうかにより true または false を返します。インターネットホストコンピュータのポート番号がわからない場合は、 ネットワーク管理者に問い合わせてください。 host パラメータに null を指定すると、ローカルホストに接続します。 サーバーサイド ActionScript の XMLSocket.connect() メソッドは、SWF ファイルが存在するのと同じドメイン内のコン ピュータには接続できません。 XMLSocket.connect() が返す値が true である場合、接続プロセスの初期段階は成功です。この後で、最終的な接続が成功し たか失敗したかを判断するために XMLSocket.onConnect ハンドラが呼び出されます。XMLSocket.connect() が false を返した 場合は、接続に失敗しています。 使用できるバージョン Flash Media Server 2 パラメータ host 完全修飾 DNS ドメイン名または IP アドレスを示す文字列。ローカルホストに接続するには null を指定します。IPv6 アドレスを角カッコで囲まないでください。 port 接続の確立に使用するホスト上の TCP ポート番号を示す数字。ポート番号は、1024 以上でなければなりません。 戻り値 ブール値。成功した場合は true、失敗した場合は false。 例 次の例では、XMLSocket.connect() を使用してローカルホストに接続します。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 162 サーバーサイド ActionScript リファレンスガイド var socket = new XMLSocket() socket.onConnect = function (success) { if (success) { trace ("Connection succeeded!") } else { trace ("Connection failed!") } }; if (!socket.connect(null, 2000)) { trace ("Connection failed!") } 注意:サーバーサイド trace() ステートメントは、アプリケーションログファイルと、Administration Console の Live Log パネルに出力されます。 XMLSocket.maxUnprocessedChars myXMLSocket.maxUnprocessedChars XMLSocket 接続が閉じる前に、(終了タグを受信することなく)XML サーバーから受信できる文字数。 XMLSocket.maxUnprocessedChars は -1 または 0 以上の値をとります。値 -1 は、処理可能なデータ量に制限がないことを意 味します。ただし、maxUnprocessedChars の値は Application.xml ファイルで指定した値を超えることはできません。 Application.xml ファイルのデフォルト値は 4,096 バイトです。 サーバーサイドスクリプトでこの値を設定すると、各 XMLSocket オブジェクトについて、Application.xml ファイルの MaxUnprocessedChars エレメントの値が更新されます。このプロパティがサーバーサイドスクリプトで設定されていない場 合、サーバーでは Application.xml ファイルの MaxUnprocessedChars エレメントで設定された値が使用されます。 使用できるバージョン Flash Media Interactive Server XMLSocket.onClose() myXMLSocket.onClose = function() {} 開いた接続がサーバーによって閉じられたときに呼び出されます。このメソッドのデフォルトの実行形態では、アクション を実行しません。デフォルトの実行形態を無効にするには、カスタムアクションを含む関数を割り当てます。 使用できるバージョン Flash Media Server 2 例 次の例では、開いた接続がサーバーによって閉じられた場合に、trace() ステートメントを実行します。 var socket = new XMLSocket(); socket.connect(null, 2000); socket.onClose = function () { trace("Connection to server lost."); } 注意:サーバーサイド trace() ステートメントは、アプリケーションログファイルと、Administration Console の Live Log パネルに出力されます。 XMLSocket.onConnect() myXMLSocket.onConnect = function(success) {} FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 163 サーバーサイド ActionScript リファレンスガイド XMLSocket.connect() で開始した接続要求が成功したか失敗したときに、Flash Media Interactive Server によって呼び出さ れます。接続に成功した場合、success パラメータは true です。それ以外の場合は、false です。 このメソッドのデフォルトの実行形態では、アクションを実行しません。デフォルトの実行形態を無効にするには、カスタ ムアクションを含む関数を割り当てます。 使用できるバージョン Flash Media Server 2 パラメータ success ソケット接続が正常に確立されたか(true)または確立されなかった(false)かを示すブール値。 例 次の例では、onConnect() ハンドラに対して関数を定義します。 socket = new XMLSocket(); socket.onConnect = myOnConnect; socket.connect(null,2000); function myOnConnect(success) { if (success) { trace("Connection success") } else { trace("Connection failed") } } XMLSocket.onData() myXMLSocket.onData = function(src) {} ゼロ(0)バイトで終了するメッセージがサーバーからダウンロードされると、呼び出されます。XMLSocket.onData() を無 効にして、サーバーから送られたデータを XML として解析せずにインターセプトできます。これは、転送するデータパ ケットのフォーマットが一定でない場合に、受け取ったデータを Flash Media Interactive Server で XML として解析する のでなく、直接操作するのに適しています。 デフォルトでは、XMLSocket.onData() メソッドは XMLSocket.onXML() メソッドを呼び出します。XMLSocket.onData() を無 効にしてカスタムの動作を使用すると、XMLSocket.onXML() は、XMLSocket.onData() で呼び出さない限り呼び出されなく なります。 使用できるバージョン Flash Media Server 2 パラメータ src サーバーから送られたデータを含む文字列。 例 次の例では、src パラメータはサーバーからダウンロードされた XML テキストを含む文字列です。ゼロ(0)バイトのター ミネータは、文字列に含まれません。 XMLSocket.prototype.onData = function (src) { this.onXML(new XML(src)); } FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 164 サーバーサイド ActionScript リファレンスガイド XMLSocket.onXML() myXMLSocket.onXML = function(object) {} XML ドキュメントを含む指定された XML オブジェクトが、開いている XMLSocket 接続を通して到達したときに呼び出 されます。XMLSocket 接続を使用してクライアントとサーバーの間で転送できる XML ドキュメントの数に制限はありま せん。各ドキュメントは、値ゼロ (0) のバイトで終了します。Flash Media Interactive Server がゼロバイトを受信すると、 直前のゼロバイト以降に受信されたか、またはこれが最初に受信されたメッセージである場合は接続が確立された後に受信 された、すべての XML を解析します。解析された XML の集合は 1 つの XML ドキュメントとして処理され、onXML() ハ ンドラに渡されます。 このメソッドのデフォルトの実行形態では、アクションを実行しません。デフォルトの実行形態を無効にするには、独自に 定義したアクションを含む関数を割り当てます。 使用できるバージョン Flash Media Server 2 パラメータ object サーバーから受信した解析済み XML ドキュメントを含む XML オブジェクト。 例 次の関数では、簡単なチャットアプリケーションで onXML() メソッドのデフォルトの実装を無効にします。関数 myOnXML() は、次の形式で 1 つの XML エレメント MESSAGE を認識するようにチャットアプリケーションに指示します。 . var socket = new XMLSocket(); 次の displayMessage() 関数は、ユーザーが受信したメッセージを表示するユーザー定義関数であるとします。 socket.onXML = function (doc) { var e = doc.firstChild; if (e != null && e.nodeName == "MESSAGE") { displayMessage(e.attributes.user, e.attributes.text); } }; XMLSocket.send() myXMLSocket.send(object) object パラメータで指定された XML オブジェクトまたはデータを文字列に変換し、その後ろにゼロ (0) バイトを付加して サーバーに転送します。object が XML オブジェクトである場合、文字列は XML オブジェクトの XML テキスト表現です。 myXMLSocket オブジェクトが XMLSocket.connect() を使ってサーバーに接続されていない場合、XMLSocket.send() 操作は失 敗します。 使用できるバージョン Flash Media Server 2 パラメータ object サーバーに転送する XML オブジェクトまたは他のデータ。 FLASH MEDIA INTERACTIVE SERVER 3.5 サーバーサイド ACTIONSCRIPT リファレンスガイド 165 サーバーサイド ActionScript リファレンスガイド 戻り値 ブール値。サーバーがソケットを取得し、ソケットが接続されている状態である場合は true、それ以外の場合は false です。 true 値は、データが正常に送信されたことを示すものではありません。send() メソッドは非同期です。つまり、値はただち に返されますが、データが送信されるのはその後になる場合があります。 例 次の例は、XML オブジェクト my_xml をサーバーに送るためにユーザー名とパスワードを指定する方法を示します。 var myXMLSocket = new XMLSocket(); var my_xml = new XML(); var myLogin = my_xml.createElement("login"); myLogin.attributes.username = usernameTextField; myLogin.attributes.password = passwordTextField; my_xml.appendChild(myLogin); myXMLSocket.send(my_xml); 関連項目 XMLSocket.connect() XMLStreams クラス XMLStreams クラスは、XMLSocket クラスの一種です。メソッド、プロパティおよびイベントは XMLSocket クラスと同 じですが、データの送受信は断片的に行います。XMLStreams オブジェクトを作成するには、XMLSocket コンストラクタ を使用して、「stream」をパラメータとして渡します。160 ページの「XMLSocket コンストラクタ」を参照してください。 Flash Media Interactive Server は XML データをストリーム形式で送信することができます(Jabber server や IM アプリ ケーションで必要とされる場合など)。ストリーミング XML データは通常の XMLSocket 接続で渡されますが、 stream:stream タグで始まり、XML コンテンツの断片を含み、終了タグ /stream:stream で締めくくられます。 onData() ハンドラは、完全な XML タグを受信すると呼び出され、完全な XML タグを返します。/stream:stream タグはスト リームを終了します。完全なタグをストリームが受信すると、onData() への非同期呼び出しが行われます。 注意:セキュリティ対策として、XML タグを終了する前に 4,096 バイトのデータを受信した場合は、ソケット接続が終了 します。この値は、Application.xml ファイルの XMLSocket.maxUnprocessedChars プロパティまたは MaxUnprocessedChars エレメントで設定できます。 使用できるバージョン Flash Media Server 2 例 Flash Media Server アプリケーションが XML ストリーミングを使用する Jabber サーバーと通信できるようにするには、 XMLStreams オブジェクトを作成します。XMLStreams オブジェクトはリモートの XML ストリーミングサーバーに接続 します。onData() ハンドラは、XML の完全なセクションをストリームで受信すると呼び出されます。 myXMLStreams = new XMLSocket("stream"); 166