Recent Entries
Recent Comments
OZACC.blog: Flash Category Archive

2008年11月15日

Flash | Flash CS4 日本語ドキュメント

Adobe Flash CS4 Professional * Flash CS4 Professional

先日までFlash CS4のβ版からヘルプを呼び出しても認証が掛かってて見られなかったけど、今日誤ってヘルプを選択したらアクセスできるようになっていた。

あー、公式だとこういう風に訳すのかと思うところが多々。原稿はもうとっくに提出しているので、今更直したくないけど。

Posted by otsuka : 19:55 | Comment (0) | Trackback (0)

2008年11月09日

Flash | AS3でRemote Shared Object

SharedObject - ActionScript 3.0 言語およびコンポーネントリファレンスガイド

setDirty() メソッド

SharedObject.setProperty() メソッドは、setDirty() を実装します。ほとんどの場合、たとえばプロパティの値がストリングや数値のようなプリミティブ型のときは、setProperty() を呼び出すことが可能で、setDirty() を呼び出す必要はありません。ただし、プロパティの値が独自のプロパティを持つオブジェクトである場合は、setDirty() を呼び出してオブジェクト内の値が変更された日時を示します。

もう、なんで?というAS仕様に悩むこと2時間。
FMSのRemote Shared Objectを使うプログラムを初めてAS3で書いてたんだけど、AS側から

so.data['key'].name = value;
と、RSOのデータを変更してもサーバにこの変更が伝わらない。
オレ様のコードは正しいはずなのに…と、この辺りの書き方をいろいろアレンジしてみたが直らない。で、ドキュメントを読み直していたら、AS2の時とは挙動が変わってた。

新しくsetProperty() や setDirty() メソッドが追加されており、RSOのプロパティ値を変更する場合は基本的には setProperty() メソッドを使うようだ。データがObjectやArrayの場合でその中身だけ変更した場合とかは、setDirty() を明示的に呼び出す必要がある。なので、上記のコードは

so.data['key'].name = value;
so.setDirty('key');
とすることで、サーバまで変更が伝わるようになった。

因みに、上で引用しているドキュメントの「setDirty() を呼び出してオブジェクト内の値が変更された日時を示します。」の、最後の「変更された日時を示します」は誤訳っぽい印象。

Posted by otsuka : 00:41 | Comment (0) | Trackback (0)

2008年10月15日

Flash | Flash Playerダウンロードページ

Adobe Flash Player - Downloads

いつもこのページになかなか辿り着けないので今日はメモしておく。

Adobe Flash Player 10 Update for Flash CS4 ProfessionalにDebug版のFlash Player 10も含まれている。

Posted by otsuka : 16:17 | Comment (0) | Trackback (0)

2008年09月26日

Flash | dango

トップページ - dango

サーバサイドではRubyを使ったFlashとのリアルタイム通信フレームワーク。昨日のFlex勉強会のプレゼンで知りました。
通信はポーリングとかではなくストリーミングで、データフォーマットはJSONとのこと。

データフォーマットはAMF(RubyAMF)を使てみては、とAdobeの外国人から突っ込まれていたけど、確かにフォーマットをJSONとAMFとで選択できるといいかも。
一サーバで100接続くらいはさばけるらしい。複数台でスケールアウトできる仕組みがあれば実用性が高まりそう。

BlazeDSだとFlashから使えないので(何か方法はありそうだけど)、Flashからでも使えるdangoは今後期待大。FMSクローンになれば言うことナシ。

Posted by otsuka : 18:40 | Comment (0) | Trackback (0)

2008年09月22日

Flash | AIRアプリ向けコード署名証明書

グローバルサイン、Adobe AIR向けコードサイニング証明書の提供を開始 | ネット | マイコミジャーナル

先日、あるプロジェクトでも話題に上ったAIRアプリの証明書。価格帯的にはThawteとほぼ同じだけど、国内で対応してもらえるのはありがたい。

数ヶ月前までは大手企業のAIRアプリでもCA発行の証明書による署名はされてないものが多かったけど、最近はきちんと署名されたアプリが増えてきている様子。

基本的に制作会社側ではクライアント企業の電子証明書は取得できないので、AIRアプリの制作を行う場合は、早めにこの点について確認しておく必要がある。

AIR ファイルへの電子署名

Posted by otsuka : 01:36 | Comment (0) | Trackback (0)

2008年06月05日

Flash | Flex Builder 3 with Java 6

スタンドアロンのFlex Builder 3をインストールして、そこでプラグイン「Explore it」を使おうと思ったらインストールは出来たけど、動作しなかった。
調べてみると、Flex Builder 3付属のJREはJava 5だった。てっきりもうJava 6が使われてると思い込んでいた。

Flex Builder 3が使うJREをJava 6のものに変えようと前にも書いたやり方を試してみたところ、うまくいかずJava 5が使われたままだった。

Flex Builder 3のショートカットのリンク先を次のように変えるとOKだった。Explore itも動作するようになった。
"C:\Program Files\Adobe\Flex Builder 3\FlexBuilder.exe" -vm "C:\Program Files\Java\jdk1.6.0_05\jre\bin\javaw.exe"

Posted by otsuka : 15:54 | Comment (0) | Trackback (0)

2008年05月15日

Flash | Flash Player 10

Adobe Labs - Flash Player 10 Beta Release Notes

大分大幅な機能強化だ。

File Reference runtime accessは待望の機能。AIRの必要性がひとつ減った感じ。
Dynamic Sound Generationも面白そう。

Posted by otsuka : 19:08 | Comment (0) | Trackback (0)

2008年05月06日

Flash | AMF仕様書の日本語版

Developer Documentation - BlazeDS - Confluence

いつの間にかAMF仕様書の日本語版が出ていた。が、AMF 3の方は英語のままだ。

Django AMFの開発もしばらくやってないのでそろそろ再開したいが…
忙しいときはやりたいことがいっぱいあるんだけど、いざ時間ができるとダラダラしてしまい何もやらない病はどうしたらいいのだろうか。

とりあえず今月の目標としては、ストリッパーズに野球部(軟式)を創設する。

Posted by otsuka : 23:21 | Comment (0) | Trackback (0)

2008年03月26日

Flash | メタデータタグ

Adobe Flex 3 ヘルプ

via 中垣 茂 ( Shigeru Nakagaki ) | ブログ ( Flex, AIR, ColdFusion ) | メモ : Flex 3 メタデータ一覧

ちゃんとドキュメントにまとめられてたんですね。いつもタグに指定できるプロパティが分からなくなってしまって調べるのに苦労していたので、これは助かる。

でもまだ他にもメタデータタグはあるよね? ぱっと思いつくのは [SWF] タグ。

Posted by otsuka : 18:13 | Comment (0) | Trackback (0)

Flash | PureRubyなRTMPサーバ

PureRubyなRTMP(MP4/H.264)サーバをオープンソース化しました - takumalog

これはすごいですね。このままRuby製FMSクローンまで育てて欲しいです。

Posted by otsuka : 18:05 | Comment (0) | Trackback (0)

2008年03月20日

Flash | Tweener処理後に対象オブジェクトを削除

Tweener.addTween(aDisplayObject, {alpha:0, onComplete:deleteObject});

function deleteObject():void {
    this.removeChild(aDisplayObject);
}

上のコードのように、あるDisplayObjectをフェードアウトした後に、それが属しているDisplayObjectContainer(上の場合this)から削除したいのだけど、上のコードだとdeleteObject()が呼ばれた時ににはTweenerがまだaDisplayObjectを何かしてるから削除できないよとエラーになってしまう。

こういうことをしたい場合、どうすればいいのでしょうか? Tweenerに詳しい方、教えてくださいまし。
お礼にSMEの3/30のライブチケットを差し上げます。

Posted by otsuka : 18:23 | Comment (4) | Trackback (0)

2008年03月13日

Flash | AS3のコレクションライブラリ

vegas - Google Code

Javaで言うところのSortedMapのAS3実装が欲しくて探してみたんだけど、このVegasというフレームワークしか見つからなかった。確かにライブラリというよりはフレームワーク。巨大すぎて使う気がそがれる。
必要なクラスだけ抽出して…と思ったけど、継承が深いので面倒くさそう。

今回は自分で実装するとしても、Apache CommonsのCollectionUtilsレベルのコレクションライブラリがあると便利な気がする。標準のArrayとObjectだけでは何かと不便。

Spark projectで作ってくれないかなあ。

Posted by otsuka : 18:47 | Comment (2) | Trackback (0)

2008年03月05日

Flash | ライブラリのアセットはリフレクションで

今取り組んでいる案件は訳あってFlash CS3でコンパイルしなければならないが、コンテンツはほぼActionScriptオンリーで作成している。ソースはFlex Builder 3のActionScriptプロジェクトとして書いているのだが、Flash CS3でコンパイルするため[Embed]メタタグで画像等の素材を埋め込むことができない。そのため、Flashのライブラリに画像を登録し、リンケージで書き出している。

例えばIconクラスとしてリンケージ書き出したビットマップのシンボルは、ActionScriptの中で扱うときに

var iconData:BitmapData = new Icon(0, 0);
var icon:Bitmap = new Bitmap(iconData);
addChild(icon);
といった感じとなる。
しかし、Flex BuilderからFlashのライブラリは参照できないので、Iconクラスの参照が常にエラーとして表示されてしまう。Flashのライブラリをクラスパスに加える方法はないものなのか。

で、このエラー表示は鬱陶しいなあと思っていた今日この頃だったのだけど、さっきリフレクションでオブジェクトを生成すればいいんじゃんということに気付いた。

var IconClz:Class = getDefinitionByName('Icon') as Class;
var iconData:BitmapData = new IconClz(0, 0) as BitmapData;
var icon:Bitmap = new Bitmap(iconData);
addChild(icon);
これでFlex Builderからエラーの表示が消えた。スッキリした。他のエラーにも気付きやすくなったし。

リフレクションでのオブジェクト生成がパフォーマンスにどれ位影響を与えるのか、後で調べてみる。

追記
簡単なパフォーマンステストをしてみた。リフレクションの方が遅いと予想してたけど、僕の環境ではリフレクションで生成しようが、クラスを直接参照して生成しようが実行速度は変わらなかった。

Posted by otsuka : 02:26 | Comment (0) | Trackback (0)

2008年02月29日

Flash | TextFieldの最小限の高さ

TextLineMetrics - Adobe Flex 3リファレンスガイド

TextFieldのheightプロパティを、そのフィールドに含まれるテキストに合わせた最小限のものにしたくて次のようなコードを書いていた。

var textField:Text = new TextField();
textField.wordwrap = true;
textField.text = '長いテキストと仮定します。';
textField.height = textField.textHeight;
しかし、これだと複数行になる場合に何故か最終行が表示されず困ったことになる。なので、上のコードの最後を
textField.height = textField.textHeight + 5;
と、その時の気分に合わせて適当に高さを加えていた。

上記のTextLineMetricsクラスのドキュメントに掲載されている図を見て、このナゾが理解できた。
TextFieldの中のテキストとTextFieldの枠(heightの対象になるもの)の間に上下それぞれ2pxずつのガターがあったのだ。なので、最終行までちゃんと表示させるにはTextFieldの高さはtextHeightの値に少なくとも4pxを加える必要がある。つまり、TextFieldの高さを最小限にするためには次のようなコードになる。

var gutter:int = 2;
textField.height = textField.textHeight + gutter * 2;

幅に関しても同じ。すっきりした。

Posted by otsuka : 18:08 | Comment (0) | Trackback (0)

2008年02月27日

Flash | CS3のTextInput、TextAreaコンポーネント

TextArea - ActionScript 3.0 コンポーネントリファレンスガイド

Flash CS3のテキスト入力コンポーネントへの入力を監視してゴニョゴニョやろうと、textInputイベントをlistenしてたんだけど、このイベントオブジェクトのpreventDefault()メソッドを呼んでも何も起こらない。そのまま入力できてしまう。

長時間いろいろ試した挙げ句に最終的にソースを読んでみると、コンポーネントの内部でTextFieldからのtextInputイベントを一度キャッチして、イベントオブジェクトを作り直して再送出していた。このイベントオブジェクトのcancelableプロパティはfalseになっていた。
あれ? cancelableプロパティはtrueってドキュメントに書いてあったじゃんと思って再度見てみると、

cancelable:
true は、preventDefault() メソッドを呼び出して、デフォルトの動作をキャンセルします。
と書いてあった。確かにウソは書かれていないのだけど。。。ここではfalseに固定されてるんだから、trueの場合のことなんて書くなよ。

幸いなことにtextInputイベントを再送出している箇所のメソッドがprivateではなかったので、これらのコンポーネントクラスを継承した自前テキスト入力コンポーネントを作って解決。

Posted by otsuka : 22:49 | Comment (0) | Trackback (0)

2008年02月25日

Flash | Red5 0.7.0

Red5 v0.7.0 final 02.23.2008 Open Source Flash

Red5の新バージョンがリリースされていた。今まで0.6.3が出たちょっと後のSVN Trunkバージョンを使っていたけど、これを機に最新にアップグレードしてみたら、既存のプログラムは動かなかった。

Red5はこんなことの繰り返しだ。早く安定して欲しい。

Posted by otsuka : 17:57 | Comment (0) | Trackback (0)

2008年02月20日

Flash | Flex to Flash

Flex(ActionScriptプロジェクト)で開発していたものをFlash CS3環境に移行しなければならなくなった。すぐにできるかと思ったら、結構面倒くさかった。
以下、やったこと。

Embedしていた画像やSWFといったアセット類をFlashのライブラリに移し、リンケージの設定やらコードの修正を行う。

corelibas3syndicationlibが動かない。というか、componentsフォルダに置いてもこれらのSWCがFlash CS3から認識されない。なので、ソースファイルをクラスパスに加える。が、コンパイルエラー。corelib内のクラスからmxパッケージ配下のクラスへの参照があるため。Flex 3のソースディレクトリをクラスパスに加えてみたが、うまくいかなった。仕方ないので、mx.utils.StringUtilへの参照をcom.adobe.utils.StringUtilに変更。

コンパイルは通ったが今度はas3syndicationlibのDateUtilクラスから例外がスローされる。調べてみたらこのバグ報告と同じ。
対処方法は、このブログエントリーのコメント欄に。DataBase.asをcom.adobe.utilsパッケージに置いて、DateUtilクラス内のDateBaseクラスへの参照をこのcom.adobe.utils.DateBaseに変更する。

これで動くようになった。
corelibやsyndicationlibなどのコアとなるようなライブラリはmxパッケージに依存しないで欲しい。

Posted by otsuka : 20:12 | Comment (0) | Trackback (0)

2008年02月15日

Flash | Wowza H.264サポート

Wowza Media Server Pro H.264 Preview Release

これが正式にサポートされるようになると、FMS 3との機能差は大分縮まる。

Posted by otsuka : 12:36 | Comment (0) | Trackback (0)

2008年02月09日

Flash | AS3 デコンパイラ

AS3 decompiler

出力されるデコンパイル結果は僕には何だかよく分からないものだけど、クラスに含まれるメソッドやその引数、変数にどんなものがあるのかは読み取れる。

さっきこのデコンパイラの存在を知ったばかりなんだけど、早速これが役に立って、ある問題の回避方法が分かった。これで眠れる。

Posted by otsuka : 04:26 | Comment (0) | Trackback (0)

2008年01月30日

Flash | Commandsライブラリ

fladdict.net blog: AS3で非同期処理を行う為のcommandsライブラリ

すばらしい。SerialCommandクラスがかなり便利そう。後でソースを追ってみよう。
これらのCommand連結を流れるようなインターフェースで実現できればベター。


ちょろっとSerialCommandクラスのソースを見てみたけど、次の関数処理に移る際の条件となるイベントがEvent.COMPLETEに固定されている。デフォルトはCOMPLETEイベントでいいと思うんだけど、Commandを連結する際に他のイベントに設定できるとより便利かも。

Posted by otsuka : 13:38 | Comment (0) | Trackback (0)

2008年01月28日

Flash | Flex UIコンポーネントのcallLater()メソッド

callLater() メソッドの使用 -- Flex 2

callLater() メソッドは、現在の更新ではなく、次の画面更新で実行する処理をキューに格納します。

このメソッドの存在を今更ながら知った。次回のEnterFrameイベント発生時まで処理をペンディングするということか。いちいちイベントリスナーの処理を書かなくていいから便利そう。多用すると危険な気がするけど。
ActionScriptの関数としても欲しい。自分で書けばいいだけか。

Posted by otsuka : 23:37 | Comment (0) | Trackback (0)

2008年01月23日

Flash | Loaderのイベント

TNSTUDIO blog: AS3_メモ4

ロードした画像にスムージングかけたいのだけども、パブリッシュブレビューだとロードがcompleteしたタイミングで、event.target.contentを参照してもnullになったりしませんか?
これはおそらくcompleteイベントではなくinitイベントをlistenするようにすればいいのでは?
loader.contentLoaderInfo.addEventListener(Event.INIT, 
  function(e:Event):void {
    // var loader:Loader = e.target.loader;
    var bitmap:Bitmap = loader.content as Bitmap;
  }
});
試してないけど。
Posted by otsuka : 15:35 | Comment (0) | Trackback (0)

2008年01月16日

Flash | クロスドメインでのリダイレクト

例えば「www.example.com/base.swf」のFlashコンテンツから「before.example.net/cgi-bin/data.cgi」というURLに対してCGIのリクエストを行っているとする。クロスドメインなリクエストになるので、このURLでのCGI呼び出しの前に「before.example.net/crossdomain.xml」が読み込まれる。

さて、今日あるトラブルにより、Flashは何もいじらないまま「before.example.net」へのCGIリクエストを「after.example.net」に転送させる必要があった。そのためまずbefore.example.netのApacheでmod_rewriteを使って全リクエストをafter.example.netにリダイレクトさせるようにした。

ところが、これだと
・Flash → before.example.net/crossdomain.xml →(リダイレクト)→ after.example.net/crossdomain.xml
となり、Flashコンテンツは「after.example.net」に対してリクエストを許可されることになる。つまり、以降の「before.example.net」へのリクエストは許可されていないことになりFlashからリクエストは送信されない。

解決策としては、「before.example.net/crossdomain.xml」は転送しないでそのままFlashに返すようにする。こうすると
・Flash → before.example.net/crossdomain.xml
・Flash → before.example.net/cgi-bin/data.cgi →(リダイレクト)→ after.example.net/cgi-bin/data.cgi
といった望ましい挙動となった。

要するにFlashからのリクエストをリダイレクトする場合、crossdomain.xmlへのリクエストはリダイレクトしてはいけないということ。

Posted by otsuka : 17:40 | Comment (0) | Trackback (0)

2008年01月15日

Flash | URLLoader

as3httpclient - Google Code

AS3であるWebサービスを使用するライブラリを作ろうとしていたところ、いくつか引っかかったポイントがあった。

まず標準APIのURLLoader。そのWebサービスはWSSE認証が必要だったために、HTTPのリクエストヘッダに任意の値をセットできる必要があった。幸いURLLoaderに渡すURLRequestクラスのAPIドキュメントを見ると、requestHeadersプロパティが用意されている。
WSSEヘッダの値の生成は、corelibのWSSEUsernameTokenクラスを使えばOKなので、これでWSSEの認証部分はOKだなと思ったら、ここに第一の罠が。

URLLoaderでリクエストヘッダを付けたリクエストを送っても、そのヘッダが付いていない。検索してみると「URLRequestHeader#requestHeadersが反映されない」というFxUGの投稿が見つかった。同じ症状。
結論から書くと、FxUGで書かれているようなcrossdomain.xmlが云々という問題ではなく、GETリクエストでは任意のリクエストヘッダが付与されないということが分かった。同じリクエストのmethodをPOSTにして適当にPOSTデータを付けてURLLOaderから送信してみるとWSSEヘッダはちゃんと付いていた。おそらくFlash Playerの問題。仕様なのかバグなのかは分からないけど。

じゃあ、GETリクエストで任意のリクエストヘッダが付けられるURLLoaderをSocket使って自作するしかないのかと思っていたところ、次の記事を見つけた。

HTTP Authentication for HTTP/GET requests using ActionScript 3

I was not able to set the header of a HTTP/GET request. Macromedia Flash Player allows you set the header only for POST requests.

上と同じことが書いてあります。で、この人はHTTPURLLoaderクラスというURLLoaderではできない機能を持つものを作って公開してくれてます。基本的なインターフェースはURLLoaderと同じなので、クラス名をHTTPURLLoaderに差し替えるだけで使える。
このお陰でGETリクエストでもWSSEヘッダを付けられるようになりました。

WSSE認証ができたら、次はPOSTメソッドでXMLデータを送受信する機能の実装。POSTリクエストなら標準のURLLoaderで問題ないなと思ったら、ここにもまた罠が。
何が悪いのか分からなかったのだけど、何度やってもレスポンスのXMLが受け取れない。COMPLETEイベントを受け取る前に、「Error #2032: ストリームエラー」で中断されてしまう。Proxyソフトで正しいXMLレスポンスが返ってきているところまでは確認できているのだが。

URLLoaderは使わずにHTTPURLLoaderクラスを使うかと思って、試してみたところHTTPURLLoaderクラスはPOSTメソッドに対応していなかった。あちらを立てればこちらが立たず。なかなかうまくはいきません。
HTTPURLLoaderに手を入れてPOSTに対応させるかとごちゃごちゃいじってたんだけど思い通りにいかず、最終的に行き着いたのがas3httpclientのSocketURLLoader。HTTPURLLoaderと同じ人が作ってます。もっと早くに気付いていれば。。

このSocketURLLoaderクラスを使うと、POST結果のXMLレスポンスもちゃんと受け取れるようになって、万事解決。前にも書いたHTTPステータスも受け取れるみたい。すばらしい。

Posted by otsuka : 17:34 | Comment (0) | Trackback (0)

2007年12月04日

Flash | Flash Media Server 3

アドビ、H.264対応のFlash Player、Media Serverをリリース - @IT

同時接続数や帯域の制限がなくてこの値段なら、前のバージョンに比べてかなりリーズナブル。
アップグレード価格は用意されてないのかな。

Posted by otsuka : 21:33 | Comment (4) | Trackback (0)

2007年11月09日

Flash | ライブストリーミングサーバ

糸柳和法のオッパイぷるるん☆放送局 - 各種 RTMP サーバーでのライブストリーミングの実現

FMS / Wowza / Red5 それぞれを使ってのライブストリーミング検証記事。オリジン/エッジサーバ方式のクラスタリング構成での検証も。これは必読。


そんなにクライアントが多くないマルチユーザアプリならRed5で特に問題なく動いているけど、負荷が掛かる状況や動画ストリーミングとなると怪しいところが出てくるのかも知れない。
Wowzaの動作検証をまだやってないけど、余裕ができ次第やってみないと。

Posted by otsuka : 12:00 | Comment (0) | Trackback (0)

2007年11月01日

Flash | onEnterFrameループ

今日学んだこと。

画面表示の裏でonEnterFrameループを使って重たい処理を分割実行するときは、毎フレームではなく数フレームに1回の割合で処理を実行するようにして画面表示処理への影響を抑える。

Posted by otsuka : 02:33 | Comment (0) | Trackback (0)

2007年10月19日

Flash | JIS X 0213文字セットへの対応

[231260]環境依存文字を入力すると文字化けする(Flash CS3)

Flashコンテンツの中のテキストフィールドにWindows VistaからJIS X 0213で追加された文字を入力しようとすると文字化けするというトラブルが発覚し、こちらで調べた限り対処法が分からなかったので、先日AdobeのFlash Playerテクニカルサポートに問い合わせを送った。問い合わせの翌日、Flashでは環境依存文字はサポートされておりませんと、上記URLを添えて返答があった。

上記サポートデータベースの内容はFlash CS3のものだがFlash Playerにも当てはまるみたい。ただ、Flashコンテンツ上にテキストフィールドに直接入力しすると文字化けするけど、コピペすると入力できるし(フォントがちょっとおかしいが)、サーバから取得した環境依存文字を表示する分には問題ない。次期バージョンでサポートされることを期待。

Posted by otsuka : 12:26 | Comment (0) | Trackback (0)

2007年10月18日

Flash | Flash CS3のアイコンパネル

Flash CS3に備わっている各種パネルのドッキング機能とアイコン化機能は、ステージやスクリプトエディタを広く使いたい場合にすこぶる便利。なんだけど、「アイコンパネルを自動的に折りたたむ」ようにしている時、アイコンパネルを開いたままFlash以外のアプリケーションに切り替えると、Windowsのタスクバーが点滅してしまうのが難点。
何とかできないものか。

Flash CS3にはまだまだ便利機能がありそうなんだけど、全然使えていない気がする。

Posted by otsuka : 20:21 | Comment (0) | Trackback (0)

2007年09月14日

2007年09月13日

Flash | 続・Remoting Classes for Flash CS3

OZACC.blog: Remotingな仕事

フリーランス時代にトーサキと仕事したとき、Flash Remotingを使うと関数を呼び出してレスポンスを取得するまでのprogressが取れないのが気になる点として挙げられた。

あれから3年半。ActionScript 3になって、ようやくこの機能を実現できる目処が付いた。
以前に、Strippers Remoting ClassesというFlash 9からAMFを使ったRPC呼び出しを行うクラスを作ったけど、これはflash.net.NetConnectionを使って実装していた。NetConnectionクラスを使えばAMFプロトコル自体は全く意識しなくてもいいのだが、AMFに含まれる細かい情報を扱えないため、Django AMFの独自機能を実装する上で障害になっていた。
で、ここ数日ちょっと余裕ができたので、AMF <-> ByteArrayを相互変換できるようにし、flash.net.URLLoaderを使ってサーバとやりとりするように作り直している。ByteArrayクラス自体にオブジェクトのAMFシリアラズ/ディシリアライズメソッドが備わっているので、AMFメッセージの構造さえ知っていれば比較的容易に実装できる。URLLoaderクラスを使えばProgressイベントが取れるため、前述の機能が実現できるようになった。

サーバから受け取ったAMFメッセージのバイナリデータを自分でパースするので、NetConnectionクラスやFlexのRemoteObjectクラスでは取れなかったAMFのヘッダを自在に扱うことができるようにもなった。
このAMFヘッダをHTTPヘッダのように扱えば、前に考えていたキャッシュ的な機能を実現できるかも知れない。

Posted by otsuka : 19:55 | Comment (0) | Trackback (0)

Flash | FlashでHTTPステータス

HTTPStatusEvent - Adobe Flex™ 2 リファレンスガイド

HTTP ステータスコードをプレーヤーに渡すことができないブラウザで実行される Flash Player プラグインでは、常に値 0 が生成されます。該当するブラウザには、Netscape、Mozilla、Safari、Opera、および Internet Explorer for the Macintosh があります。

URLLoaderクラスでサーバから受け取ったレスポンスのHTTPステータスコードを参照しようとしたら、常にゼロ。どういうわけだ?と思ってAPIドキュメントを調べてみたら、ちゃんと書いてありました。
って、Win IE以外の主要ブラウザではHTTPステータス取得できないじゃん。HTTPステータス取得は諦めるしかないか。

URLLoaderじゃなくてSocket使ってHTTPプロトコルを実装すればできるのかな? JavaのCommons HTTPClientやCommons NetみたいなライブラリはまだAS3では存在しない?

Posted by otsuka : 02:06 | Comment (2) | Trackback (0)

2007年09月12日

Flash | AMF Predefined Headers

Predefined headers | Open Source Flash

このページは見過ごしていた。あとRemoting EnvelopeDebug informationのページも。
これらのページを読んでDjango AMFではいくつかAMFの解釈を間違ってた部分があることに気付いたので、直してリリースした。

定義済みヘッダのうち、RequestPersistentHeaderは独自機能を実装する上で重要そう。「This is implemented in mx.remoting.Connection.」とあるけど、flash.net.NetConnectionでもサポートされているのかどうか調べなければ。

DjangoではURLにくっつけるタイプのセッションIDをサポートしていないのでDjango AMFでAppendToGatewayUrlヘッダは意味がなさそうだけど、AMFPHPはこのヘッダの機能を使ってたんだなということが分かった。

ReplaceGatewayUrlヘッダは、ゲートウェイURLのリダイレクト機能ってことか。何かに使えるかな?

Posted by otsuka :