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]< ?php
class HolaMundo
{
function HolaMundo()
{
$this->methodTable = array
(
"saludar" => array
(
"access" => "remote",
"description" => "Devuelve un saludo"
)
);
}
function saludar($s) {
return "Hola, ".$s."!!!";
}
}
?>[/PHP]
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.
[AS]package {
import flash.net.NetConnection;
import flash.net.ObjectEncoding
public class RemotingConnection extends NetConnection
{
public function RemotingConnection( sURL:String )
{
objectEncoding = ObjectEncoding.AMF0;
if (sURL) connect( sURL );
}
public function AppendToGatewayUrl( s : String ) : void
{
//
}
public function AddHeader() : void
{
}
public function ReplaceGatewayUrl() : void
{
}
}
}[/AS]
Una vez creada la clase dentro de nuestro proyecto creamos el siguiente archivo mxml:
[HTML]< ?xml version="1.0" encoding="utf-8"?>
< ![CDATA[
import mx.managers.CursorManager;
public var gateway : RemotingConnection;
public function realizarLlamada(_quien:String) :void{
gateway = new RemotingConnection( "http://www.alexdw.com/flashservices/gateway.php" );
//gateway = new RemotingConnection( "http://localhost/flashservices/gateway.php" );
CursorManager.setBusyCursor();
gateway.call( "HolaMundo.saludar", new Responder(ok,ko),_quien);
}
public function ok(o:Object) : void {
CursorManager.removeBusyCursor();
salida.text =o.toString()
}
public function ko(o:Object) : void {
CursorManager.removeBusyCursor();
salida.text = "Se produjo un error al hacer la llamada al metodo"
}
]]>
[/HTML]
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
Mayo 3rd, 2006 - 08:55
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!
Diciembre 23rd, 2008 - 16:48
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!
Diciembre 23rd, 2008 - 21:26
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