NetConnectionを使う
サーバサイドのサービスを呼び出すにはNetConnectionクラスを使用します。まず、「gatewayアドレス」を第一引数に、connect
メソッドを呼び出し、接続します。
connect(command:String, ... arguments):void
「gatewayアドレス」は、サーバサイドのAMF実装に依存する、固定のアドレスです。接続に成功したら、call
メソッドを使って実際のサービスを呼び出します。
call(command:String, responder:Responder, ... arguments):void
第一引数には、サービス名を指定します。第二引数には、Responderインスタンスを指定します。Responderは、呼び出しが成功したときのハンドラと、呼び出しが失敗したときのハンドラを指定して生成します。第三引数以降には、引数を指定します。引数が必要ない場合には省略します。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%"> <mx:Script><![CDATA[ private static const PERL:String = "Perl"; private static const PHP:String = "PHP"; private static const PYTHON:String = "Python"; private static const NET:String = "NET"; private static const RUBY:String = "Ruby"; private function sayHello():void { var client:IServiceClient; switch (lang.selectedValue) { case RUBY: client = new RubyClient(this); break; case PHP: client = new PHPClient(this); break; case PYTHON: client = new PythonClient(this); break; case PERL: client = new PerlClient(this); break; case NET: client = new NETClient(this); break; default: throw new Error("Invalid selection."); } if (client != null) { const useAMF0:Boolean = lang.selectedValue == PERL; client.callRemote(useAMF0); } } ]]></mx:Script> <mx:Form width="100%" height="100%"> <mx:FormItem label="Remote service type:"> <mx:HBox> <mx:RadioButtonGroup id="lang"/> <mx:RadioButton groupName="lang" label="{RUBY}" selected="true"/> <mx:RadioButton groupName="lang" label="{PHP}"/> <mx:RadioButton groupName="lang" label="{PYTHON}"/> <mx:RadioButton groupName="lang" label="{PERL}"/> </mx:HBox> </mx:FormItem> <mx:FormItem label="Send to server"> <mx:HBox horizontalAlign="left" width="100%"> <mx:TextInput id="tiMessage" text="Hello" /> <mx:Spacer width="100%" /> <mx:Button label="Send a request" click="sayHello()" /> </mx:HBox> </mx:FormItem> <mx:FormItem label="Result from server" width="100%" height="100%"> <mx:TextArea id="taResult" width="100%" height="100%"/> </mx:FormItem> <mx:FormItem label="Error from server" width="100%" height="100%"> <mx:TextArea id="taFault" width="100%" height="100%"/> </mx:FormItem> </mx:Form> </mx:Application>
サーバサイドの処理結果が成功か失敗かに応じて、Responderの生成時に指定した対応するハンドラに渡されます。
実際のコード例は以下のようになります。
var responder:Responder = new Responder(onSuccess, onFault); try{ gateway.connect(gatewayUrl); } catch(e:ArgumentError){ trace("invalid gateway address..."); }