[perl] perlとFLASHで通信してみる。
脈略なくこんなのをはじめてみる。
元ネタは "14歳からはじめるActionScriptオンラインゲームプログラミング教室" より
著者の大槻有一郎氏の本は正直お勧めだ。
自分はこの手のソースが直に本文に書かれている書籍は買わないのだが
明らかに初心者がハマるところを丁寧に書いてあるし、
適当な語句で誤魔化すこともしない。
研修とかにしても格別な素材であると思う。
とまぁ本の批評が目的ではないのでこれくらいにして、
題の通り、通信をしてみる。
perlはともかく、ActionScriptなんてものはさっぱり触ったことが無いため
何ができて何ができないのか分からないの若干の不安はあるが
まーなんとかなるさの精神でちょっとやってみようと思う。
まず環境設定など
無料でFlashの制作環境が整えられる! FlashDevelopとFlex SDK 3のインストール方法(ビデオ付き) | ClockMaker Blog
http://clockmaker.jp/blog/2009/07/tutorial-install-flashdevelop-flex-sdk/
前回も書いた気がするので略。
次、httpサーバーだがLinuxのapache2を使う。
使う理由はエラーログが読めるからと、perlもLinux上で動かすから。
ApacheでUserdirを使用できるようにする。 - そ、そんなことないんだから!
http://d.hatena.ne.jp/Fiore/20080310/1205127955
キモは
#AddHandler cgi-script .cgi
のコメントアウトだっただろうか。これで30分くらい悩んだ。
samba設定で自分のhome以下に public_html ディレクトリを作成し、
その下に以下のような配置でFlashDevelopでプロジェクトを作成する。
$ tree
-- Main.as3proj | |
-- bin | |
-- Main.swf | |
-- cgi-bin | |
`-- test.cgi | |
-- expressInstall.swf | |
-- index.html | |
`-- js | |
`-- swfobject.js | |
-- lib | |
-- obj | |
-- MainConfig.old | |
`-- MainConfig.xml |
続いて cgi-bin/test.cgi の中身(書籍と一緒)
#!/usr/bin/perl print "Content-type: text/plain; charset=utf-8\n\n"; print "あなたのメッセージは\n"; $str = $ENV{"QUERY_STRING"}; print "$str\n";
FLASHのソース Main.as の中身
package { import flash.display.Sprite; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLRequest; import flash.text.TextField; /** * ... * @author hato */ public class Main extends Sprite { public var tf:TextField = new TextField(); public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point this.addChild( this.tf ); this.tf.width = 200; this.tf.background = true; this.tf.backgroundColor = 0xFFEE00; var request:URLRequest = new URLRequest( "/~hato/bin/cgi-bin/test.cgi?What+is+Happens!");// // IP を含むフルパスでもよいかも var loader:URLLoader = new URLLoader(); loader.addEventListener( Event.COMPLETE, this.completed ); loader.load(request); } private function completed( event:Event ):void { var loader:URLLoader = URLLoader( event.target ); this.tf.text = String( loader.data ); } } }
あとは http://*.*.*.*/bin/ を叩けば index.html -> Main.swf -> test.cgi の順で
リクエストが行われる。
今回はGETを用いているがパラメータが多くなることを予想してPOSTにするつもり。
以下メモ
FlashDevelopの使い方 (0)まとめ - 独学ActionScript
http://d.hatena.ne.jp/ActionScript/20090505/flash_develop_matome
FlashDevelopの使い方 (5)Flex 4 SDKでtraceを表示する [改訂版] - 独学ActionScript
http://d.hatena.ne.jp/ActionScript/20090320/fd_flex4_sdk_trace
Adobe ActionScript 3.0 * ActionScript 3.0 の概要
http://help.adobe.com/ja_JP/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-8000.html
すべてのパッケージ - ActionScript 3.0 コンポーネントリファレンスガイド
http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/package-summary.html
ステートメント、キーワード、ディレクティブ - ActionScript 3.0 コンポーネントリファレンスガイド
http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/statements.html#try..catch..finally
pragma no-cache - Google 検索
http://www.google.co.jp/search?q=pragma+no-cache&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a