Flex 2.0 e AMFPHP!!!

Até o Flex 1.5, podia-se usar o AMFPHP normalmente, simplesmente apontando o endereço do gateway através da tag RemoteObject como no exemplo a seguir:

  1. < ! -- endpoint is the location of the gateway file. source is the name of the
  2.     service (can be fully qualified like com.mydomain.MyService). AMFPHP does not support
  3.     named arguments but you can simply write them as arg1, arg2, etc. -->
  4. < mx :RemoteObject endpoint="http://www.mydomain.com/amfphp/gateway.php"
  5.    id="service"
  6.    source="MyService"
  7.    protocol="http"
  8.    showBusyCursor="true">
  9.    < mx :method name="doSomething">
  10.       < mx :arguments>
  11.         < arg1>{txtName.text}< / arg1>
  12.       < / mx:arguments>                        
  13.  < / mx:method>
  14. < / mx:RemoteObject>

No Flex 2.0 foi introduzido um novo protocolo AMF, o AMF3, com melhorias de peformance e rendimento. No entanto, para se usar o RemoteObject será necessario ter o Flex Interprise Services no servidor, ou seja ficamos novamente limitados ao requisitos do servidor para o desenvolvimento.

Entretando como sempre foi politica da macromedia, o Flex 2.0 ainda será compativel com o AMF0. Agora temos a opção de escolher entre os dois protocolos. Ficando entre AMF0 e o AMF3.
Isso rendeu discurssões bem interessantes na lista do flexcoders
Para determinar qual protocolo será usado basta configurar o objectEncoding.Por exemplo:

ActionScript

  1. //usando o AMF0
  2. objectEncoding = ObjectEncoding.AMF0;
  3. //usando o AMF3
  4. objectEncoding = ObjectEncoding.AMF3;

Como resultado dessas discurssões, chegou-se ao seguinte codigo.
Esse codigo foi baseado no post do Jesse Warden

Criando uma classes extendendo a classe NetConnection

ActionScript

  1. package {
  2.     import flash.net.NetConnection;
  3.     import flash.net.ObjectEncoding;
  4.    
  5.     public class RemotingConnection extends NetConnection {
  6.         public function RemotingConnection(sURL:String){
  7.             objectEncoding = ObjectEncoding.AMF0;
  8.             if(sURL){
  9.                 connect(sURL);
  10.             }  
  11.         }
  12.         public function AppendToGatewayUrl(s:String):void{
  13.                
  14.         }
  15.        
  16.     }
  17. }

Tendo isto, usaremos outra classe para usar o AMF0 e conectar ao AMFPHP

ActionScript

  1. package {
  2.     import flash.display.Sprite;
  3.     // import the internal classes
  4.     import flash.net.Responder;
  5.     import flash.net.NetConnection;
  6.     import flash.net.ObjectEncoding;
  7.     // import your custom class
  8.     import RemotingConnection;
  9.     import flash.util.trace;
  10.     import flash.display.MovieClip;
  11.     import flash.display.Stage;
  12.     import flash.display.StageAlign;
  13.     import flash.display.StageScaleMode;
  14.  
  15.     public class remoting extends Sprite{
  16.         public var gateway_conn:NetConnection2;
  17.         public var gatewayURL:String = "http://127.0.0.1/flashservices/gateway.php";
  18.        // setup your jazz
  19.         public function remoting(){
  20.             this.gateway_conn = new RemotingConnection();
  21.             this.gateway_conn.objectEncoding = ObjectEncoding.AMF0;
  22.             this.gateway_conn.connect(gatewayURL);
  23.             // make a method call on a PHP class
  24.             var r:Responder = new Responder(onPingResult, onPingStatus);
  25.             this.gateway_conn.call("teste2.ola", r);
  26.         }
  27.         // call back functions
  28.         public function onPingResult(event:Object):Void{
  29.             // success!
  30.             //trace(event.result);
  31.             trace("onPingResult()");
  32.             var s:Stage = new Stage();
  33.             s.scaleMode = StageScaleMode.NO_SCALE;
  34.             s.align = StageAlign.TOP_LEFT;
  35.             var t:TextField = new TextField();
  36.             t.width = 500;
  37.             t.text = "FLASH REMOTING!!! eu sou "+event;
  38.             addChild(t);
  39.             trace("FLASH REMOTING!!! eu sou " +event);
  40.         }
  41.         public function onPingStatus():Void{
  42.             //Status;
  43.         }
  44.     }
  45. }

A nossa classe em PHP para teste.

  1. < ?php
  2. //flie teste2.php
  3. class teste2{
  4.  
  5.     function teste2(){
  6.         $this->methodTable = array(
  7.         "ola" => array(
  8.         "description" => "testando o AMFPHP com Flex 2.0",
  9.         "access" => "remote" // available values are private, public, remote
  10.         )
  11.         );
  12.     }
  13.  
  14.     function ola(){
  15.         return "FLEX 2.0 COM AMFPHP!!!";
  16.     }
  17. }
  18. ?>

Agora podemos brincar bastante com o Flex 2 e AMFPHP

Veja um exemplo funcionando.

AMFPHP
http://www.amfphp.org/docs/otherplatforms.html

Labs Adobe(Macromedia)
http://labs.macromedia.com

Flexcoders
http://www.flexcoders.com

Necessário Flash Player 8.5

ActionScript 3.0, AMFPHP, Flash, Flash Platform, Flash Remoting, Flex, PHP, Principal, RIA

2 comments


  1. Leonardo Boa noite.

    Por favor entre em contato comigo pelo MSN, preciso falar com você sobre alguns projetos que tenho para desenvolvimento de Rich internet Applications.

    Atenciosamente
    Lucas Marçal
    Colunista MXSTUDIO
    PS: não te mandei e-mail pois não achei link em seu site.

Leave a Reply