Primeiro Projeto com Red5

1. Introdução:
Será criado um projeto simples no Red5 que ao ser executado faz a soma de dois números. Para isso:
- será criado um projeto no Eclipse com a mesma estrutura do projeto no Red5, o projeto no Eclipse terá uma classe que realizará um serciço no servidor, ou seja, várias aplicações Flex podem acessar esse serviço.
- será criado um projeto no Red5 com a estrutura que lhe é peculiar, contendo o serviço criado no Eclipse.
- será criado uma aplicação Flex que utiliza o serviço criado no Red5.

2. Criar o serviço no Eclipse
O serviço consiste na criação de uma Classe Java que fará o serviço no servidor Red 5, portanto deve-se cria um projeto adequado, com a mesma estrutura de pastas, no Eclipse e no Red5.

2.1. Crie um projeto com o nome server4 no Eclipse:
2.1.1. Abra o Eclipse
2.1.2. File > Java Project > 
Project Name: service4
JRE > Use an execution environment JRE: JavaSE-1.6 > Finish

2.2. Delete a pasta src.
2.3. Crie um source folder (pasta de código) com o nome WEB-INF/src.
2.4. Crie em WEB-INF um folder (pasta) com o nome classes, dentro dela crie outro folder com o nome org, dentro dela outro folder com o nome red5, dentro dela outro folder com o nome server4,este último folder já é a estrutura do próprio projeto Red5.
2.5. Crie em WEB-INF um folder com o nome lib
2.6. Crie um pacote em WEB-INF/src com o nome: org.red5.server4.
2.7. Crie dentro do pacote server4 a classe Application.java, recorte e cole os códigos fontes direto da tela do navegador.

Arquivo Application.java


package org.red5.service4;

import org.red5.server.adapter.MultiThreadedApplicationAdapter;

public class Application extends MultiThreadedApplicationAdapter {
    public int add(int a, int b)
    {
        return a+b;
    }
}

2.8. Importe a bliblioteca red5.jar de onde foi instalado o Red 5 para o projeto.
- Dê um clique com o botão direito no mouse no projeto.
- Clique em Properties > Java Buil Path > aba Libraries > botão Add External JARs...
- Vá até onde foi instalado o Red 5 e selecione o arquivo red5.jar

2.9. O projeto ficara com a seguinte estrutura:

C:\Users\Usuario1\workspace


Quando você salvar seu projeto, você vai ter compilado o arquivo java em WEB-INF/classes.
 

3. Criar um projeto no Red5
3.1. Crie na pasta webapps do Red5 a estrutura de pastas conforme a figura abaixo.
3.2. Recorte os arquivos Application.java e Application.class do projeto do Eclipse e cole na pasta server4 do projeto do Red5, conforme figura abaixo.



3.3. Crie no bloco de notas do Windows os arquivos red5-web.properties, red5-web.xml e web.xml na pasta WEB-INF conforme figura abaixo:



Código fonte dos arquivos:


red5-web.properties
webapp.contextPath=/service4
webapp.virtualHosts=*

red5-web.xml
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:lang="http://www.springframework.org/schema/lang"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd                           
    http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.0.xsd">

    <bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="/WEB-INF/red5-web.properties" />
    </bean>
   
    <bean id="web.context" class="org.red5.server.Context" autowire="byType" />
   
    <bean id="web.scope" class="org.red5.server.scope.WebScope" init-method="register">
        <property name="server" ref="red5.server" />
        <property name="parent" ref="global.scope" />
        <property name="context" ref="web.context" />
        <property name="handler" ref="web.handler" />
        <property name="contextPath" value="${webapp.contextPath}" />
        <property name="virtualHosts" value="${webapp.virtualHosts}" />
    </bean>

    <bean id="web.handler" class="org.red5.service4.Application" />

</beans>

web.xml
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<display-name>service4</display-name>
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>/service4</param-value>
</context-param>
<listener>
<listener-class>org.red5.logging.ContextLoggingListener</listener-class>
</listener>
<filter>
<filter-name>LoggerContextFilter</filter-name>
<filter-class>org.red5.logging.LoggerContextFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoggerContextFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
 remove the following servlet tags if you want to disable remoting for this application
-->
<servlet>
<servlet-name>gateway</servlet-name>
<servlet-class>org.red5.server.net.servlet.AMFGatewayServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>gateway</servlet-name>
<url-pattern>/gateway</url-pattern>
</servlet-mapping>
<security-constraint>
<web-resource-collection>
<web-resource-name>Forbidden</web-resource-name>
<url-pattern>/streams/*</url-pattern>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
</web-app>

3.4. No Eclipse exporte o projeto server4  para a pasta lib criada no Red5
File> Export > JAR file NEXT

Marque todas opções em service4
Select the export destination: C:\Red5Java\webapps\service1\WEB-INF\lib
Salvar Nome: service4.jar
C:\Red5Java\webapps\service4\WEB-INF\lib\server4.jar
Finish

O arquivo server4.jar deverá estar na pasta lib do projeto do Red5 conforme figura abaixo:


4. Criar um aplicativo Flex

1) Abra o FlashDevelop
2) Crie um arquivo ActionScript
Nenu Fle > New > AS3 Document > Service4
3) Recorte e cole o código fonte baixo:

Arquivo:  Service4.as

package
{
    import flash.net.NetConnection;
    import flash.net.Responder;
    import flash.display.*;
    import flash.events.*;
   
    import flash.display.Sprite;
    import flash.text.TextField
   
    public class Service4 extends MovieClip
    {
        public var nc:NetConnection;
       
        public function Service4():void
        {
            dbg("Begin", 5, 10);
            nc = new NetConnection();
            dbg("Got NetConnection", 5, 30);
            nc.connect("rtmp://localhost/service4");
            dbg("Called connect()", 5, 50);
            nc.addEventListener(NetStatusEvent.NET_STATUS, netConnectionHandler);
            nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
            dbg("Added listeners", 5, 70);
           
            var nr:Responder = new Responder(netResponderHandler);
            dbg("Created responder", 5, 90);
            nc.call("add", nr, 2, 3);
            dbg("Made call()", 5, 110);
        }
       
        public function netConnectionHandler(evt:NetStatusEvent)
        {
            dbg("status: " + evt.info.code,5, 130);
        }
       
        public function securityErrorHandler(evt:SecurityErrorEvent):void
        {
            dbg("securityErrorHandler: " + evt, 5, 150);
        }
       
        public function netResponderHandler(serverResult:Object)
        {
            dbg("The result is " + serverResult, 5, 160);
        }
       
        //public function dbg(msg:String):void {
        //trace(msg);
        //console.appendText(msg + "\n");
        //}
       
        public function dbg(msg:String, ox:int, oy:int):void
        {
           
            var txt:TextField = new TextField();
            addChild(txt);
            txt.text = msg;
            txt.x = ox;
            txt.y = oy;
        }
    }
}
4) Compilação e execução:
Menu Tools > Flash Tools > Build Current File
Deverá aparecer no Flash Player o ressultado abaixo (figura).



Obs: a função dbg() foi criada para substituir a função trace() uma vez que esta última função não estava funcionando com o Flash Player Debug.