Salve pessoal
Historicamente eu sempre trabalhei com ColdFusion isso já tem alguns anos, porém nos últimos 2 anos e venho trabalhando bastante com PHP por motivos óbvios, a falta de programador ColdFusion visto que eu não faça mais todo o processo de desenvolvimento de um site.
Porém essa semana eu tive uma demanda de um site feito em flash que deveria consumir métodos de um CFC (ColdFusion Componente), como eu não fazia isso desde a época que eu trabalhava com AS2 decidi escrever uma nova classe para conexão em AS3 e foi exatamente ai que meus problemas começaram.
Primeiramente eu teria que instalar o ColdFusion 8 na minha maquina e de preferência ele deveria rodar em cima do Apache, para isso eu usei o Tutorial do meu brother Marcio Nakano:
Instalando servidor Apache com Mysql e as linguagens ColdFusion e PHP.
Feito isso (e depois desfeito, pois achei que isso poderia ser a causa do erro que eu descrevo a seguir) agora era a hora de escrever a classe, mas por onde começar, Google é a solução? Não foi bem assim.
O material que fala sobre Flash Remoting + ColdFusion na web é bem fraco e muito confuso sem falar que a grande maioria é em inglês o que dificultou um pouco mais o entendimento já que não sou um expert na língua do “Tio Sam”, abaixo estão listados alguns dos melhores que encontrei:
Delicious Flash Remoting
Foi então que tive a feliz idéia de Twittar essa minha raiva e logo depois recebi uma mensagem do Neto Leal e de Bruno Ribeiro me oferecendo ajuda, na parte do Neto Leal ele me indicou esse link:
Ativando Flash Remoting
Mesmo fazendo o que o link indica o erro ainda persistia foi então que comecei a trocar idéia com o Bruno Ribeiro, depois de algumas dicas e do envio da classe que ele mesmo usa para fazer isso eu consegui conectar e consumir um método do ColdFusion.
Eu sempre digo isso, mas é bom reforçar, na vida uma das melhores coisas é ter amigos e eu agradeço ao Neto Leal e ao Bruno Ribeiro pela ajuda, então nada mais lógico do que eu postar aqui a classe que eu fiz baseada nesse longo caminho percorrido para conseguir conectar o Flash ao ColdFusion e ao AMFPHP, lembrando que essa classe foi baseada na classe do Bruno Ribeiro e não tenho a pretensão de achar que ela é a melhor do mundo, mas pelo menos ela funciona com ColdFusion e AMFPHP, segue o código:
RemotingConexao.as
[coolcode lang="actionscript"]
package lmcosta.remoto.cf
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.NetStatusEvent;
import flash.net.NetConnection;
import flash.net.ObjectEncoding;
import flash.net.Responder;
/**
* …
* @author lmcosta
* @link www.lucasmarcal.com.br/blog – www.brunoribeiro.net
* @return
* @version 1.0
*/
public class RemotingConexao extends MovieClip
{
public var _servico : NetConnection;
public var _responder : Responder;
public var _fcnRetorno : Function;
public var _cfc : String;
public var _metodo : String;
public var _resultado : Object;
public function RemotingConexao()
{
this._responder = new Responder(resultado, falha);
this._servico = new NetConnection();
this._servico.objectEncoding = ObjectEncoding.AMF0;
this._servico.connect(“http://127.0.0.1:8500/flashservices/gateway”);
trace(“Conectou”);
}
/**
*
* @param $cfc = String que contém o caminho do CFC
* @param $metodo = String com o nome do método do CFC
* @param $fcnRetorno = Metodo de retorno na referencia dessa classe
* @param $args = Argumentos
*/
public function consome($cfc:String = “” , $metodo:String=”" , $fcnRetorno:Function = null , $args:Object = null ):void
{
var refCFCMetodo:String = $cfc + “.” + $metodo;
this._fcnRetorno = $fcnRetorno;
this._cfc = $cfc;
this._metodo = $metodo;
if ($args == null)
{
this._servico.call.apply(null, [refCFCMetodo, this._responder]);
}
else
{
this._servico.call.apply(null, [refCFCMetodo, this._responder].concat($args));
}
}
/**
*
* @param f = Objeto que retorna Erros
*/
private function falha(f:Object):void
{
trace(“fault”+f.details);
trace(“fault”+f.description);
}
/**
*
* @param re = Objeto que retorna os resultados
* @return Retorna o valor que veio do CFC na referencia da classe
*/
private function resultado(re:Object):Object
{
this._resultado = re;
if (re != “”)
{
this._resultado = re;
if (this._resultado.length)
{
return this._fcnRetorno(this._resultado);
}
else
{
return this._fcnRetorno(false);
}
}
else
{
return this._fcnRetorno(false);
}
}
}
}
[/coolcode]
Consumindo a classe
Para utilizar essa classe você deve criar um novo arquivo no Flash do tipo Actionscript 3.0, depois crie uma classe que no meu caso eu chamei de “Teste.as” e escreva o seguinte:
Teste.as
[coolcode lang="actionscript"]
package
{
import flash.display.MovieClip;
import lmcosta.remoto.cf.RemotingConexao;
/**
* …
* @author lmcosta
*/
public class Teste extends MovieClip
{
public var re:RemotingConexao
public function Teste()
{
trace(“Conetando…….”)
this.re = new RemotingConexao();
this.re.consome(“remotoAS3.componente”, “ola”, this.resultadoItem, {msg:”Seja Bem vindo”});
}
public function resultadoItem(obj:Object):void
{
trace(“Tudo certo hora de trampar ” + obj)
}
}
}
[/coolcode]
Para utilizar a mesma classe para conectar ao AMFPHP basta você trocar o caminho do Gateway na classe RemotingConexao.as e indicar a classe e o método na classe Teste.as
Gostaria mais uma vez de agradecer ao Bruno Ribeiro e ao Neto Leal pela ajuda e espero que essa classe possa ajudar a todos.
Até a próxima pessoal e sigam-me pelo Twitter




ShareThis