RED5学习笔记(二):RED5项目配置

服务器端:

red5的项目的建立与tomact非常的相似.

1、在 Red5的安装路径C:\Program Files\Red5\webapps下建立自己的项目文件夹:

2、将C:\Program Files\Red5\doc\templates\myapp下的文件夹WEB-INF复制到自己的项目中,WEB-INF里是red5主要的项目配置文件。

3、 在WEB-INF下建立classes以及src文件夹。

4、在项目根目录下建立Eclipes项目。classes为编译目录,src为源码目录。

5、导入red5 jar包。

 

 6、修改配置文件:

web.xml文件

<? xml version="1.0" encoding="ISO-8859-1" ?>
< 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 > My sample Red5 application </ display-name >

    
< context-param >
        
< param-name > globalScope </ param-name >
        
< param-value > default </ param-value >
    
</ context-param >

    
< context-param >
        
< param-name > contextConfigLocation </ param-name >
        
< param-value > /WEB-INF/red5-*.xml </ param-value >
    
</ context-param >

    
< context-param >
        
< param-name > locatorFactorySelector </ param-name >
        
< param-value > red5.xml </ param-value >
    
</ context-param >

    
< context-param >
        
< param-name > parentContextKey </ param-name >
        
< param-value > default.context </ param-value >
    
</ context-param >
    
   
     <!--如果不注释需要导入log4j的jar包。。。。。。。一定小心
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/log4j.properties</param-value>
    </context-param>
    
-->
    
    
< context-param >
        
< param-name > webAppRootKey </ param-name >
        
< param-value > /chatApp </ param-value >
    
</ context-param >
    
    
    
<!--  
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>
    
-->
    
    
    
< listener >
        
< listener-class > org.springframework.web.context.ContextLoaderListener </ listener-class >
    
</ listener >

    
<!--  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 >
    
</ 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 >

 red5-web.xml

<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
< beans >
    
    
< 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.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
="com.papaya.Application"  
        singleton
="true"   />

    
<!--  this will support calling methods through "myhandler.<methodName>"  -->
    
    
<!--   
    <bean id="myhandler.service" 
        class="the.path.to.my.ServiceHandler" 
        singleton="true" />
    
-->

</ beans >

 red5-web.properties

webapp.contextPath=/chatApp
webapp.virtualHosts=localhost, 127.0.0.1

 7、建立程序的入口类

 Application.java

package  com.papaya;

import  org.red5.io.utils.ObjectMap;
import  org.red5.server.adapter.ApplicationAdapter;
import  org.red5.server.api.IScope;

import  com.papaya.VO.MapConventPojo;
import  com.papaya.VO.User;

public   class  Application  extends  ApplicationAdapter 
{
        
public  String sayHello(String name)
        {
            System.out.println(
" hello " + name);
            
return   " hello " + name;
        }
        
        
public   boolean  appStart(IScope scope)
        {
            System.out.println(
" 聊天服务器启动了!!!! " );
            
return   true ;
        }
        
        
public  Object sendVo(ObjectMap message)
        {
            User user 
= new  User();
            MapConventPojo.Convent(message, user);
            System.out.println(user.getAge());
            System.out.println(user.getName());
            System.out.println(user.getSchool());
            
return  user;
            
            
        }
        
}

8、建立客户端flash类

 

package  com.renaun.samples.net
{
import  com.game.Logger;

import  flash.events.AsyncErrorEvent;
import  flash.events.Event;
import  flash.events.IEventDispatcher;
import  flash.events.IOErrorEvent;
import  flash.events.NetStatusEvent;
import  flash.events.SecurityErrorEvent;
import  flash.net.NetConnection;

import  com.game.Logger;

/**
 *     Note: This class was dynamic in ActionScript 2.0 but is now sealed. 
 *  To write callback methods for this class, you can either extend the 
 *  class and define the callback methods in your subclass, or you can 
 *  use the client  property to refer to an object and define the callback 
 *  methods on that object.
 
*/
dynamic 
public   class  FMSConnection  extends  NetConnection  implements  IEventDispatcher
{

    
// --------------------------------------------------------------------------
    
//
    
//   Constructor
    
//
    
// --------------------------------------------------------------------------
    
    
    
public   static    const  SUSSESS:String = " success " ;
    
public   static   const  FAILURE:String = " Failure " ;
    
    
/**
     *  Constructor
     
*/
    
public  function FMSConnection() 
    {
        
super ();

    }
    
    
public  var clientID:Number;
    
    
// --------------------------------------------------------------------------
    
//
    
//   Methods
    
//
    
// --------------------------------------------------------------------------

    
/**
     *  Connect
     
*/
    override 
public  function connect( url:String, args ): void
    {
        
//  Set object encoding to be compatible with Flash Media Server
         this .objectEncoding  =  flash.net.ObjectEncoding.AMF0;
        NetConnection.defaultObjectEncoding
        
        
//  Add status/security listeners
         this .addEventListener( NetStatusEvent.NET_STATUS, netStatusHandler );
        
this .addEventListener( SecurityErrorEvent.SECURITY_ERROR, netSecurityError );
        
this .addEventListener( AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler );
        
this .addEventListener( IOErrorEvent.IO_ERROR, ioErrorHandler );        
        
        
//  TODO does not pass args into the super function
         super .connect( url );
    }


    
/**
     *  setID
     
*/
    
public  function setId( id:Number ): *
    {
        Logger.debug( 
" FMSConnection::setId: id= "   +  id );
        
if ( isNaN( id ) )  return ;
        clientID 
=  id;
        
return   " Okay " ;
    }

    
/**
     *     Status Handler for the NetConnection class
     
*/
    
private  function netStatusHandler( event:NetStatusEvent ): void
    {
        
switch ( event.info.code ) {
            
case   " NetConnection.Connect.Success " :
                Logger.debug( 
" FMSConnection:netStatusHandler:Success: connected:  "   +   this .connected );
                dispatchEvent( 
new  Event(FMSConnection.SUSSESS) );
                
break ;
            
case   " NetConnection.Connect.Failed " :
                Logger.debug( 
" FMSConnection:netStatusHandler:Failed: connected:  "   +   this .connected  +   "  -  "   +  event.info.code );
                dispatchEvent( 
new  Event(FMSConnection.FAILURE) );
                
break ;            
            
default :
                Logger.debug( 
" FMSConnection:netStatusHandler:code:  "   +  event.info.code );
                    
break ;
        }
    }

    
private  function netSecurityError( event:SecurityErrorEvent ): void  {
        Logger.error( 
" FMSConnection:netSecurityError:  "   +  event );
    }        

    
private  function asyncErrorHandler( event:AsyncErrorEvent ): void  {
Logger.error( 
" FMSConnection:asyncErrorHandler:  "   +  event.type  +   "  -  "   +  event.error );
    }    

    
private  function ioErrorHandler( event:IOErrorEvent ): void  {
Logger.error( 
" FMSConnection:asyncErrorHandler:  "   +  event.type  +   "  -  "   +  event.text );
    }    

}
}

 

转载于:https://www.cnblogs.com/daidu/archive/2009/11/25/1610145.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值