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