Flash Remoting ActionScript API 2.0

S2OpenAMFに含まれる、AS2.0のクラスとJavaBeansをマッピングするサンプルを、AS2.0用に書き換えてみました。環境のセットアップでつまづいただけで、後は簡単でした。もう少し詳しい使い方を見てみるつもりですが、とりあえず動いたので貼り付け!

import AddDto;
import mx.remoting.Service;
import mx.remoting.PendingCall;
import mx.rpc.RelayResponder;
import mx.rpc.FaultEvent;
import mx.rpc.ResultEvent;

mx.remoting.debug.NetDebug.initialize();

var gatewayUrl:String = "http://localhost:8080/S2OpenAMF/gateway";
var serviceName:String = "calculatorName";
var service:Service = new Service(
                                gatewayUrl,
                                null,
                                serviceName,
                                null,
                                null);

function doSubmit():Void {
    var addDto = new AddDto();
    addDto.arg1 = Number(num1_txt.text);
    addDto.arg2 = Number(num2_txt.text);

    var pc:PendingCall = service.plus(addDto);
    pc.responder = new RelayResponder(this, "plus_Result", "plus_Fault");
}

function plus_Result(re:ResultEvent):Void {
    var addDto = re.result;
    ans_txt.text = addDto.result;
}

function plus_Fault(fa:FaultEvent):Void {
    trace("faultstring = " + fa.fault.faultstring);
    trace("faultcode = " + fa.fault.faultcode);
    trace("type = " + fa.fault.type);
    trace("detail" + fa.fault.detail);
}

要約すると

  1. Serviceオブジェクトを作る
  2. service.メソッド名() を呼び出す
  3. 戻り値としてPendingCallオブジェクトを受け取る
  4. pendingCall.responderにRelayResponderを設定する
  5. RelayResponderに従来のonResult, onStatusにあたるメソッド名を設定する。
  6. 5.に設定したメソッドを定義する
  7. onResultにあたるメソッドは、ResultEventを引数として受け取る
  8. onStatusにあたるメソッドは、FaultEventを引数として受け取る
  9. resultEvent.resultで戻り値が得られる
  10. RelayResponderはあらかじめ作成しておいて、Serviceオブジェクトのコンストラクタで指定する事もできる。実際の開発ではこのパターンを使いそう。

とりあえず最もシンプルな動きはこんな感じですかね?