S2Flex2 を触ってみた
FESとFB2の中間的な解として、AMF0による接続を試そーということで、nodさんとひがさんが作っているS2Flex2を触ってみました。
nodさんのコメントには、
mx.rpc.remotingパッケージがlivedocsにはFESオンリーで不安
と書いてあったので、それを使わないでつなげる方法を模索。
そして、発見。
mx.rpc.AbstractService
ソースはこんな感じ。
package org.seasar.flex2.rpc.remoting { import flash.events.Event; import flash.net.NetConnection; import flash.net.ObjectEncoding; import flash.net.Responder; import mx.events.EventDispatcher; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import mx.rpc.AbstractService; import mx.utils.Delegate; import org.seasar.flex2.net.AMF0Connection; /** * * @author nod * @author sato-shi * */ dynamic public class SimpleAMF extends AbstractService { [DefaultTriggerEvent("result")] /** @private */ [Event("fault")] /** @private */ [Event("result")] private var _con:AMF0Connection; [Inspectable(type="String")] public var gatewayUrl:String; public function SimpleAMF(){ super(); } private function initConnection(){ _con = new AMF0Connection(); _con.objectEncoding = ObjectEncoding.AMF0; _con.addHeader("DescribeService", false, 0); _con.connect(this.gatewayUrl); } public function remoteCall(methodName:Object, ...args):void { if(_con==null){ initConnection(); } var callMethod:String =this.destination +"." +methodName; var responder:Responder = new Responder(this.onResult,this.onFault); if(args.length>0){ _con.call(callMethod,responder,args); }else{ _con.call(callMethod,responder); } } public function onResult(resultData:Object){ var resultEvent:ResultEvent=new ResultEvent(resultData,null,null); dispatchEvent(resultEvent); } public function onFault(faultData:Object){ var faultEvent:FaultEvent = new FaultEvent(faultData,null,null); dispatchEvent(faultEvent); } } }
でも、これでオブジェクト渡しができるかは未だです。もうちょっとやってみます。
Class AbstractService
http://livedocs.macromedia.com/labs/1/flex/langref/mx/rpc/AbstractService.html
nod::ぶろぐ::RIA::Flash/Flex/AJAX
S2Flex2開発記(5) AMF0で接続するタグ(第一弾)
http://www.noridon.net/weblogs/archives/2006/02/s2flex25_amf0.html