状況
GAEのサンプルについて調べているうちに、PyAMFを使ったFlashとの通信ができるらしいことを知り、まずはそれを試すことにした。
過程
http://innerchild.jp/2008/04/21-013638.phpを参考に、以下の手順で確認した。fpconst.pyの入手経路と、echo関数の挙動以外は基本的に参考サイトと同じ。GAEまわりのインストールはすでに完了しているという前提での流れ。
fpconst.py をダウンロード
fpconst · PyPIのzipを解凍し、中のfpconst.pyを使う(上の参考サイトの経路からは取得できなくなってる模様)。
PyAMFをダウンロード
http://pyamf.org/wiki/Downloadのデータを解凍し、中のpyamfフォルダを使う。
必要なフォルダ、ファイルの作成
C:\Program Files\Google\google_appengine\Flash\sampleを作成し、上のfpcont.pyとpyamfフォルダをコピーしてくる。
C:\Program Files\Google\google_appengine\new_project_templateの中身もコピーしてくる。
main.pyの中身を次のように変更。
import wsgiref.handlers from pyamf.remoting.gateway.wsgi import WSGIGateway def echo(data): return data + "Python:Hello" services = { 'echo': echo, } def main(): application = WSGIGateway(services) wsgiref.handlers.CGIHandler().run(application) if __name__ == '__main__': main()
app.yamlの中身を次のように変更。
application: sample version: 1 runtime: python api_version: 1 handlers: - url: /test.swf static_files: test.swf upload: test.swf - url: /.* script: main.py
test.asを以下の中身で作成。
package{ import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.net.NetConnection; import flash.net.Responder; public class test extends Sprite { private var netConnection:NetConnection; private var responder:Responder; private var output:TextField; public function test() { output = new TextField(); output.autoSize = TextFieldAutoSize.LEFT; addChild(output); netConnection = new NetConnection(); netConnection.connect("http://localhost:8080/"); responder = new Responder(onComplete, onFail); // Python側の echo を呼び出す。 netConnection.call("echo", responder, "Flash:Hello\n"); } //サーバーの呼び出しが成功して結果が返された場合に呼び出される private function onComplete(results:String):void { output.htmlText = results; } //サーバーがエラーを返したときに呼び出される private function onFail(results:*):void { for each (var thisResult:String in results){ output.appendText(thisResult); } } } }
上のtest.asを「mxmlc test.as」としてtest.swfを作成。
さらに、以下のようなバッチファイルをgo.batという名前で作成。
python ..\..\dev_appserver.py .
実行確認
上の「go.bat」を実行し、「http://localhost:8080/test.swf」にブラウザでアクセスして、「Flash:Hello」「Python:Hello」と表示されるまでを確認。