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