RED5學習筆記(二):RED5項目配置服務(wù)器端: red5的項目的建立與tomact非常的相似. 1、在 Red5的安裝路徑C:\Program Files\Red5\webapps下建立自己的項目文件夾: 2、將C:\Program Files\Red5\doc\templates\myapp下的文件夾WEB-INF復(fù)制到自己的項目中,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./xml/ns/j2ee" xmlns:xsi="http://www./2001/XMLSchema-instance" xsi:schemaLocation="http://java./xml/ns/j2ee http://java./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./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("聊天服務(wù)器啟動了!!!!"); 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 ); } } }
|
|