28
Abr
06

Hola mundo en AMFPHP y Flex 2.0

Hoy he tenído un rato para buscar algo de información y empezar a coquetear con Flex y AMFPHP y la verdad es que el resultado ha sido grato.

Lo primero que hice fue instalar amfphp en mi sistema. Para ello bajé la version 1.2 de AMFPHP, la descomprimí y copie sus 3 carpetas dentro mi carpata flashservices. (Por cierto, me sorpendió gratamente encontrar el navegador de servicios)

Obviamente me descargué flex desde Adobe Labs Flex Builder y el player 8.5 de flash (bueno ese ya lo tenía :p ) e instalé ambos.
En primer lugar empezaremos a crear el servicio de romoting de nuestro hola mundo... creé algo sencillo tal como:

PHP:
  1. <?php
  2. class HolaMundo
  3. {
  4. function HolaMundo()
  5. {
  6. $this->methodTable = array
  7. (
  8. "saludar" => array
  9. (
  10. "access" => "remote",
  11. "description" => "Devuelve un saludo"
  12. )
  13. );
  14. }
  15.  
  16. function saludar($s) {
  17. return "Hola, ".$s."!!!";
  18. }
  19. }
  20. ?>

Guardamos como "HolaMundo.php" en nuestra carpeta flashservices/services y... voila ya tenemos nuestro primer servicio en AMFPHP. Básicamente este servicio se encargará de recibir un parametro y devolver un saludo.

Lo siguiente era crear un nuevo proyecto flex y empezar a experimentar. Para mi sorpresa la cosa fue realmente facil.

A través del Sr Google encontré un articulo (no recuerdo donde) que indicaba como conectar flex con remoting con lo que saqué la siguiente clase.

Actionscript:
  1. package {
  2.  
  3. import flash.net.NetConnection;
  4. import flash.net.ObjectEncoding
  5.  
  6. public class RemotingConnection extends NetConnection
  7. {
  8. public function RemotingConnection( sURL:String )
  9. {
  10. objectEncoding = ObjectEncoding.AMF0;
  11. if (sURL) connect( sURL );
  12. }
  13.  
  14. public function AppendToGatewayUrl( s : String ) : void
  15. {
  16. //
  17. }
  18.  
  19. public function AddHeader() : void
  20. {
  21. }
  22.  
  23. public function ReplaceGatewayUrl() : void
  24. {
  25. }
  26.  
  27. }
  28. }

Una vez creada la clase dentro de nuestro proyecto creamos el siguiente archivo mxml:

HTML:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx :Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*">
  3. </mx><mx :VBox width="100%" height="100%">
  4. </mx><mx :HBox>
  5. <mx :Label text="Escribe tu nombre"/>
  6. <mx :TextInput id="entrada" width="282"/>
  7. <mx :Button label="Saludar" height="20" click="realizarLlamada(entrada.text)" />
  8. </mx>
  9. <mx :TextArea width="467" height="76" id="salida"/>
  10.  
  11. <mx :Script>
  12. <![CDATA[
  13. import mx.managers.CursorManager;
  14. public var gateway : RemotingConnection;
  15. public function realizarLlamada(_quien:String) :void{
  16. gateway = new RemotingConnection( "http://www.alexdw.com/flashservices/gateway.php" );
  17. //gateway = new RemotingConnection( "http://localhost/flashservices/gateway.php" );
  18. CursorManager.setBusyCursor();
  19. gateway.call( "HolaMundo.saludar", new Responder(ok,ko),_quien);
  20. }
  21. public function ok(o:Object) : void {
  22. CursorManager.removeBusyCursor();
  23. salida.text =o.toString()
  24. }
  25. public function ko(o:Object) : void {
  26. CursorManager.removeBusyCursor();
  27. salida.text = "Se produjo un error al hacer la llamada al metodo"
  28. }
  29. ]]>
  30. </mx>

Compilamos el proyecto y ya tenemos nuestro primer proyecto en flex 2.0 y amfphp

Ver ejemplo (necesario tener flash player 8.5)
Descargar codigo fuente

Si ven algo extraño o no comprenden algo.. no duden en dejar un comentario


Etiquetas

Badge Farm

  • Firefox 2
  • CSSEdit 2
  • Textmate
  • Powered by Redoable 1.0

5 Responses to “Hola mundo en AMFPHP y Flex 2.0”


  1. 1 Xavi Beumala May 3rd, 2006 at 8:55 am

    Una forma de reducir bastante el código a utilizar para la invocación de servicios es heredando de AbstractService y utilizando la nueva clase Proxy (que viene a ser lo que hasta ahora había sido siempre el método __resolve) y que nos permite invocar remotamente métodos no declarados en el lado del cliente.

    Un ejemplo con código http://www.code4net.com/archives/000118.html

    En cualquier caso en f2b2 existe un bug con amf0 que no permite la serialización de custom objects en dirección servidor -> cliente (pero si cliente -> servidor )

    Saludos!

  2. 2 Flüge Dic 23rd, 2008 at 4:48 pm

    Bueno ahora ya existen muchísimas cosas más que han dejado a un lado todo esto que mencionas, sin embargo lo encontré interesante para aquellos quienes hacen sus pininos con las ondas del flex, flash, AS3 etc etc etc…. a ver si nos detallas después algo de esto nuevo…vale!

    Saludos!

  3. 3 Alex Martín Dic 23rd, 2008 at 9:26 pm

    Que tal Flüge, ha llovido bastante desde que publiqué este post :) Desde luego queda pendiente escribir algún post sobre Flex 3 y Zend Framework AMF que es con lo que ando liado últimamente.

    A ver si este 2009 que llega da las oportunidades para poder dedicarle un poco más de tiempo al blog

    Saludos

  1. 1 Go Flex! at Pingback on May 24th, 2006 at 4:04 am
  2. 2 AlexdwBlog() » Blog Archive » Componente RemoteObject para AMF0 en Flex 2Consultor / Desarrollador web Pingback on Oct 25th, 2006 at 7:46 pm

Leave a Reply