<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Lucas Marçal &#187; Flash Remoting</title>
	<atom:link href="http://www.lucasmarcal.com.br/blog/index.php/category/tutoriais/flash-remoting/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lucasmarcal.com.br/blog</link>
	<description>Flash Developer</description>
	<lastBuildDate>Wed, 31 Aug 2011 20:53:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Flash Remoting + ColdFusion + AMFPHP</title>
		<link>http://www.lucasmarcal.com.br/blog/index.php/2009/10/flash-remoting-coldfusion-amfphp/</link>
		<comments>http://www.lucasmarcal.com.br/blog/index.php/2009/10/flash-remoting-coldfusion-amfphp/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 02:16:51 +0000</pubDate>
		<dc:creator>Lucas</dc:creator>
				<category><![CDATA[Destaque]]></category>
		<category><![CDATA[Flash Remoting]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[AMFPHP]]></category>
		<category><![CDATA[ColdFusion 8]]></category>

		<guid isPermaLink="false">http://lucasmarcal.com.br/blog/?p=9</guid>
		<description><![CDATA[Resolvendo problemas na hora de conectar o flash ao Coldfusion através do Flash Remoting e do AMFPHP]]></description>
			<content:encoded><![CDATA[<p>Salve pessoal<br />
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.</p>
<p>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.</p>
<p>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:<br />
<strong><a href="http://www.zetaiweb.com.br/blog/index.php/2008/09/instalando-servidor-apache-com-mysql-e-as-linguagens-coldfusion-e-php/">Instalando servidor Apache com Mysql e as linguagens ColdFusion e PHP.</a></strong></p>
<p>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.</p>
<p>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:<br />
<strong><a href="http://delicious.com/theflashcoder/flashremoting?detail=3">Delicious Flash Remoting</a></strong></p>
<p>Foi então que tive a feliz idéia de Twittar essa minha raiva e logo depois recebi uma mensagem do <a href="http://twitter.com/netoleal">Neto Leal</a> e de <a href="http://twitter.com/bribeiro">Bruno Ribeiro</a> me oferecendo ajuda, na parte do <a href="http://twitter.com/netoleal">Neto Leal</a> ele me indicou esse link:<br />
<strong><a href="http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=othertechnologies_07.html">Ativando Flash Remoting</a></strong></p>
<p>Mesmo fazendo o que o link indica o erro ainda persistia foi então que comecei a trocar idéia com o <a href="http://twitter.com/bribeiro">Bruno Ribeiro</a>, 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.</p>
<p>Eu sempre digo isso, mas é bom reforçar, na vida uma das melhores coisas é ter amigos e eu agradeço ao <a href="http://twitter.com/netoleal">Neto Leal</a> e ao <a href="http://twitter.com/bribeiro">Bruno Ribeiro</a> 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 <a href="http://twitter.com/bribeiro">Bruno Ribeiro</a> 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:</p>
<p><strong>RemotingConexao.as</strong></p>
<pre class="brush: as3; first-line: 8; gutter: false; highlight: [10,11]; pad-line-numbers: false; title: ; wrap-lines: false;">
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;
	import nl.demonsters.debugger.MonsterDebugger
	/**
	 * ...
	 * @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 var debug       :        MonsterDebugger;

		public function RemotingConexao()
		{
			this._responder =                new Responder(resultado, falha);
			this._servico   =                new NetConnection();
			this._servico.objectEncoding =   ObjectEncoding.AMF0;
			this.debug = new MonsterDebugger(this);
			this._servico.connect(&quot;http://www.seudominio.com.br/flashservices/gateway&quot;);
			MonsterDebugger.trace(this, &quot;Chamou a classe de conexão:&quot;);
		}
		/**
		 *
		 * @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 = &quot;&quot; , $metodo:String=&quot;&quot; , $fcnRetorno:Function = null , $args:Object = null ):void
		{
			MonsterDebugger.trace(this, &quot;Consumindo metodo:&quot;);
			var refCFCMetodo:String = $cfc + &quot;.&quot; + $metodo;

			this._fcnRetorno = $fcnRetorno;
			this._cfc = $cfc;
			this._metodo = $metodo;

			if ($args == null)
			{
				MonsterDebugger.trace(this, &quot;Chamou sem parametros:&quot;);
				this._servico.call.apply(null, [refCFCMetodo, this._responder]);
			}
			else
			{
				MonsterDebugger.trace(this, &quot;Chamou com parametros: &quot; + $args);
				this._servico.call.apply(null, [refCFCMetodo, this._responder].concat($args));
			}

		}
		/**
		 *
		 * @param	f = Objeto que retorna Erros
		 */
		private function falha(f:Object):void
		{
			trace(&quot;fault&quot;+f.details);
			trace(&quot;fault&quot;+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;
			return this._fcnRetorno(this._resultado);
		}

	}

}
</pre>
<p><strong>Consumindo a classe</strong><br />
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:</p>
<p><strong>Teste.as</strong></p>
<pre class="brush: as3; first-line: 8; gutter: false; highlight: [10,11]; pad-line-numbers: false; title: ; wrap-lines: false;">

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(&quot;Conetando.......&quot;)
			this.re =  new RemotingConexao();
			this.re.consome(&quot;remotoAS3.componente&quot;, &quot;ola&quot;, this.resultadoItem, {msg:&quot;Seja Bem vindo&quot;});
		}

		public function resultadoItem(obj:Object):void
		{
			trace(&quot;Tudo certo hora de trampar  &quot; + obj)
		}

	}

}
</pre>
<p><strong><a href="http://www.lucasmarcal.com.br/labs/TutorialFlashRemotingAS3.rar">Arquivos do Tutorial</a></strong></p>
<p>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<br />
Gostaria mais uma vez de agradecer ao <a href="http://twitter.com/bribeiro">Bruno Ribeir</a>o e ao <a href="http://twitter.com/netoleal">Neto Leal</a> pela ajuda e espero que essa classe possa ajudar a todos.<br />
Até a próxima pessoal e sigam-me pelo <a href="http://www.twitter.com/lmcosta">Twitter</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lucasmarcal.com.br/blog/index.php/2009/10/flash-remoting-coldfusion-amfphp/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

