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 }