サーバとやり取り
まずAS3のコード。rascutで開発しているので3001番でサーバが立ち上がっている。
package { import flash.display.*; import flash.events.*; import flash.net.*; [SWF(width="400", height="300", backgroundColor="#eeffee")] public class Client extends Sprite { public function Client() { var url:String = "http://localhost:8080/api/foo"; var loader:URLLoader = new URLLoader(); loader.addEventListener( Event.COMPLETE, loadCompleteHandler ); loader.load(new URLRequest(url)); } public function loadCompleteHandler(e:Event):void{ log(e.target.data); } } }
で、もう一つはweb.pyを使ったサーバのコード。ローカルの8080ポートで走る。
import web urls = [ # "/", "Index", "/crossdomain.xml", "CrossDomainXML", "/api/(.+)", "Api", ] CROSS_DOMAIN_XML = """<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="localhost:3001" /> </cross-domain-policy> """ class CrossDomainXML(object): def GET(self): print CROSS_DOMAIN_XML class Api(object): def GET(self, value): print value if __name__ == '__main__': web.webapi.internalerror = web.debugerror web.run(urls, globals(), web.reloader)
これでFlashからサーバの/api/fooにリクエストを投げて、返ってきた"foo"がFirebugのコンソールに表示される。
めでたしめでたし。静的なファイルの配信はrascut -mでできるし、cgiはapiの下にどんどん足していけばいい。プロトタイピングの最初の1歩ができた。