サーバとやり取り

まず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でできるし、cgiapiの下にどんどん足していけばいい。プロトタイピングの最初の1歩ができた。