Google App EngineとFlashの通信テスト

状況

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 .

(pyファイルはテキストエディタで開くことにしたので、C:\Python25にパスを通しておいてpythonを呼ぶ)

実行確認


上の「go.bat」を実行し、「http://localhost:8080/test.swf」にブラウザでアクセスして、「Flash:Hello」「Python:Hello」と表示されるまでを確認。