Se esta querendo aprender ou iniciar novos projetos em Flex, clique aqui

Exemplo simples de Chat com PHP compartilhado no Google Code.

http://code.google.com/p/flexphpchat/

Funcionamento

O principio de funcionamento deste Chat é bem simples. Quando você clica em conectar ele chama o método buscarMensagem(), que é responsável por buscar as mensagens no servidor. No servidor, o pedido quando recebido, primeiramente ele apaga as mensagens com mais de 10s.

mysql_query("DELETE FROM `mensagem` WHERE `CHAT_DATA`+0 < now()-10;");

Por parâmetro é passado o ultimo CHAT_ID que foi carregado na consulta anterior para que só devolva mensagens após este valor. o método busca_fncOk é responsável pelo gerenciamento dos pedidos que chegam do servidor.

private function busca_fncOk(e:ResultEvent):void
{
    // apresneta as mensagens na area
    // pode vir mais que uma mensagem
    var retorno:Array = e.result as Array;
    // somente chama a função se ouve postagem
    if(retorno != null)
    {
        CHAT_ID = retorno[retorno.length-1]['CHAT_ID'];

        for(var i:int=0; i<retorno.length;i++)
        {
            areaMensagem.htmlText += "<b>" + retorno[i]['CHAT_USUARIO'] + ":</b> " +
                                     retorno[i]['CHAT_MENSAGEM'] + "<br>";
            areaMensagem.validateNow();
            areaMensagem.verticalScrollPosition = areaMensagem.maxVerticalScrollPosition;
        }
    }
    buscarMensagem()
}

Veja que ele recebe um array, e se este array não for nullo é realizado um loop que varre todo este array atrás de novas mensagens. O método validateNow() é executado para que a execução seja pausado até que o layout do TextArea esteja atualizado para assim posicionar a barra de rolagem na base dele.

Quando esta ação é finalizado, uma nova chamada do método buscarMensagem() é invocado, executando esta busca em loop infinito.

O processo de comunicação é baseado em RemoteObject facilitando assim o trabalho de programação.

Configuração

O arquivo services-config.xml

Este arquivo é responsável pela configuração do RemoteObject .

<?xml version="1.0" encoding="UTF-8"?>
<services-config>
	<services>
		<service id="amfphp-flashremoting-service"
		         class="flex.messaging.services.RemotingService"
		         messageTypes="flex.messaging.messages.RemotingMessage">
			<destination id="RemotingMessage">
				<channels>
					<channel ref="my-amfphp"/>
				</channels>
				<properties>
					<source>*</source>
				</properties>
			</destination>
		</service>
	</services>
	<channels>
		<channel-definition id="my-amfphp"
		                    class="mx.messaging.channels.AMFChannel">
			<endpoint uri="RemotingMessage/"
			          class="flex.messaging.endpoints.AMFEndpoint"/>
		</channel-definition>
	</channels>
</services-config>

Veja que em negrito esta destacado o caminho aonde se encontra o amfphp. Você pode alterado a seu critério.

O amfphp

Este é responsável por fazer a comunicação do Flex com o banco de dados. Você poderá sem muito problema implementar este código para qualquer outra linguagem de servidor.

Este amfphp possui algumas alterações que fiz para melhorar seu desempenho e sua segurança. Veja o arquivo original e após as alterações:

Depois das alterações.

Estes arquivos que foram apagados são para sar base ao XMLRPC e ao JSON. Porém como só preciso do AMF, não é necessário ficar armazenando. Renomeei o gateway para index para que a pasta não fique exposta.

PS: quando publicarem não esqueça de apagar a pasta browser.

Na chamada dos métodos, foi adicionado o utf8_decode para evitar problemas com acentuação.

$result = mysql_query(utf8_decode($query));

O banco de dados

As configurações do banco de dados estão dentro do arquivo RemotingMessage/globals.php.

define("DB_HOST", "localhost"); // Host do banco de dados
define("DB_USER", "chat");      // Usuário do banco de dados
define("DB_PASS", "");          // Senha do banco de dados
define("DB_NAME", "chat");      // Banco de Dados

O Código Fonte

Download

O código fonte esta disponível em http://flexphpchat.googlecode.com/files/chat.zip.

SVN

Acesso ao código via Brouser

http://code.google.com/p/flexphpchat/source/browse/

Por linha de Comando

svn checkout http://flexphpchat.googlecode.com/svn/trunk/ flexphpchat-read-only

Gostou? Não esqueça de curtir!

Ou compartilhe o link com seus amigos

11 comentários

Deixe uma resposta

  1. Não está funcionando aqui no meu note. Travou a página tanto no IE quanto no Chrome (Só tentei abrir nesses 2 mesmo)

     
  2. Exemplo interessante, porém não consigo colocar pra rodar... sempre recebo a seguinte msg:

    (mx.rpc::Fault)#0
      errorID = 0
      faultCode = "Client.Error.MessageSend"
      faultDetail = "Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Failed"
      faultString = "Send failed"
      message = "faultCode:Client.Error.MessageSend faultString:'Send failed' faultDetail:'Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Failed'"
      name = "Error"
      rootCause = (Object)#1
        code = "NetConnection.Call.Failed"
        description = "HTTP: Failed"
        details = "http://localhost/chat/RemotingMessage/gateway.php"
        level = "error"

     
  3. Seu AMFPHP tem erros. Verifique o arquivo de LOG

     
  4. Eduardo, achei legal o exemplo, so achei ruim o fato de fazer varias requisições em 1 segundo. tem como aumentar o tempo da busca por mensagens?

     
  5. nao estou conseguindo fazer funcionar ... alguem pode me ajduar?

     
  6. Ficaria melhor ainda se pudessemos ver se existe alguem online... Nunca sabemos se tem alguem ali pra conversarmos.
    http://felipebusiness.blogspot.com

     
  7. Cara, nao to conseguindo, eu abri o projeto no Flex, dei o: Export Release Build mas nao acessa meu banco de dados, da'i fui tentar acessar o browser do AMFPHP e ele soh fica pensando, dah uma olhada: http://www.trifacil.net/chat/RemotingMessage/browser/
    Tu sabe o que pode ser isto? Tem que ter alguma coisa no servidor pro AMFPHP funcionar alem dos proprios arquivos do AMF?
    Valeu!

     
  8. Cara ficou massa.
    Disponibiliza um .ZIP ae... lah no google code eh uma mão pra baixar os arquivos (^__^)

     
  9. Excelente, bom trabalho.

     
  10. Muito bom esse chat! Valeu