1  
     8   
     9  import com.sekati.core.CoreObject;
    10  import com.sekati.events.Dispatcher;
    11  import com.sekati.remoting.RemoteEvent;
    12  import mx.rpc.RelayResponder;
    13  import mx.rpc.ResultEvent;
    14  import mx.rpc.FaultEvent;
    15  import mx.remoting.PendingCall;
    16  import mx.remoting.Service;
    17  
    18  
    24  class com.sekati.remoting.RemoteCall extends CoreObject {
    25  
    26  	private var _gateway:String;
    27  	private var _service:String;
    28  	private var _method:String;	
    29  
    30  	
    37  	public function RemoteCall(gateway:String, service:String, method:String) {
    38  		super( );
    39  		_gateway = gateway;
    40  		_service = service;
    41  		_method = method;		
    42  	}
    43  
    44  	
    49  	public function call():Void {
    50  		var s:Service = new Service( _gateway, null, _service );
    51  		var pc:PendingCall = s[_method].apply( this, arguments );
    52  		pc.responder = new RelayResponder( this, "callResult", "callFault" );		
    53  	}
    54  
    55  	
    60  	private function callResult(res:ResultEvent):Void {
    61  		var result:Object = res.result;
    62  		var error:Object = false;
    63  		var remote:RemoteCall = this;
    64  		Dispatcher.$.dispatchEvent( new RemoteEvent( RemoteEvent.onRemoteResultEVENT, this, {result:result, error:error, remote:remote} ) );
    65  	}
    66  
    67  	
    72  	private function callFault(fault:FaultEvent):Void {
    73  		var result:Object = null;
    74  		var error:Object = {};
    75  		var remote:RemoteCall = this;
    76  		for(var i:String in fault.fault) error[i] = fault.fault[i];
    77  		Dispatcher.$.dispatchEvent( new RemoteEvent( RemoteEvent.onRemoteFaultEVENT, this, {result:result, error:error, remote:remote} ) );
    78  	}
    79  }