<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
                layout="absolute" width="416" height="276" 
                creationComplete="init()" viewSourceURL="srcview/index.html">
    <mx:Script>
        <![CDATA[
            import mx.utils.UIDUtil;
            import mx.messaging.Channel;
            import mx.messaging.channels.AMFChannel;
            import mx.messaging.ChannelSet;
            import mx.rpc.events.InvokeEvent;
            import mx.rpc.remoting.RemoteObject;
            import mx.controls.Alert;
            import mx.rpc.events.ResultEvent;
            import mx.rpc.events.FaultEvent;
            [Bindable]
            public var opsList: Array = [ {label:"+", data:1}, 
                                          {label:"-", data:2}, 
                                          {label:"*", data:3},
                                          {label:"/", data:4} ];
            private var invokeTime:Number;                                          
            private var calculatorService:RemoteObject;
                                          
            private function init():void
            {
                calculatorService = new RemoteObject( "GenericDestination" );
                calculatorService.source = "Weborb.Examples.BasicService";
                calculatorService.addEventListener( FaultEvent.FAULT, gotError );
                calculatorService.Calculate.addEventListener( ResultEvent.RESULT, gotCalculationResult );                
            }                              
                                          
            private function sendRequest():void
            {
                if( arg1.text.length == 0 )
                {
                    arg1.setFocus();
                    Alert.show( "Argument 1 is missing", "Incomplete Data" );
                }
                else if( arg2.text.length == 0 )
                {
                    arg2.setFocus();
                    Alert.show( "Argument 2 is missing", "Incomplete Data" );
                }
                else
                {
                    invokeTime = new Date().getTime();
                    calculatorService.Calculate( arg1.text, op.selectedItem.data, arg2.text );
                }
            }
            
            private function gotError( fault:FaultEvent ):void
            {
                invTime.text = (new Date().getTime() - invokeTime) + " ms";                
                serverResult.text = "Error";
                Alert.show( "Server reported an error - " + fault.fault.faultString, "Error" );
            }   
            
            private function gotCalculationResult( result:ResultEvent ):void
            {
                invTime.text = (new Date().getTime() - invokeTime) + " ms";
                serverResult.text = result.result.toString();                
            }                      
        ]]>
    </mx:Script>
    <mx:Panel x="10" y="10" width="396" height="253" layout="absolute" title="Basic Remoting Invocation Example">
        <mx:Text x="50" y="30" text="Argument 1:"/>
        <mx:Button x="50" y="120" label="Calculate result on the server" click="sendRequest()"/>
        <mx:TextInput id="arg1" restrict="0-9" x="126" y="28" width="59"/>
        <mx:Text x="50" y="88" text="Argument 2:"/>
        <mx:Text x="50" y="162" text="Server responded:"/>
        <mx:TextInput id="arg2" restrict="0-9" x="126" y="86" width="59"/>
        <mx:Text x="50" y="58" text="Operation:"/>
        <mx:ComboBox id="op" x="126" y="56" dataProvider="{opsList}" width="59"></mx:ComboBox>
        <mx:HRule x="50" y="152" width="298" height="1"/>
        <mx:Label x="159.5" y="162" id="serverResult" fontWeight="bold"/>
        <mx:Label x="50" y="185" text="Invocation time:"/>
        <mx:Label x="161.5" y="185" id="invTime"/>
    </mx:Panel>
</mx:Application>