as3与red5通信---学习三

as3与red5通信---学习三

 

 

 


 

第一步:新建元件

包括三部分

1.消息显示区,命名为show_txt

2.消息发送区命名为sent_txt

3.发送按钮,命名为sent_btn

并绑定类 CharRoom

 


 

第二步:编写绑定类

package test2{
    import fl.controls.TextArea;
    import fl.controls.TextInput;
 
    import flash.display.DisplayObject;
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
   
    public class ChatRoom extends MovieClip{ 
  
    private var netclient:NetClient ;
    public function ChatRoom(){
       super();              
    
       //发送按钮
       send_btn.addEventListener(MouseEvent.CLICK,sendMessage);
      
       //连接服务端的
       netclient = new NetClient(this);  
     }
      
     /**   
       *服务端调用此方法来更新消息列表
      */ 
    public function receiveBroadMes(mes:Object):void{
   
        /* 
         *显示窗口加入消息 ,并且清空发送窗口 
         *因为和元件绑定所以直接访问实例名:show_txt
          */ 

        show_txt.appendText(mes+"\n");       
        send_txt.text = "" ;      

}
   
        

    /**
       * 当点击发送按钮的时候,发送消息
       */       

    private function sendMessage(e:MouseEvent):void{  
        this.netclient.broadcastMes(send_txt.text);      
    }
  }
}

 


 

 第三步:编写客户端连接类

package test2{
    import flash.events.NetStatusEvent;
    import flash.net.NetConnection;

    import flash.net.ObjectEncoding;
   
    public class NetClient extends NetConnection
    {
        private var chatroom:ChatRoom ;    
        public function NetClient(chatroom:ChatRoom)    { 
            this.chatroom = chatroom ;
    
            this.objectEncoding = ObjectEncoding.AMF0;          
           
            this.addEventListener(NetStatusEvent.NET_STATUS , netStatus);     
                
            this.connect("rtmp://192.168.0.20/red5_server");

  }     
    /** 
       * 服务端调用此方法
       * 更新显示窗口
       */   

    public function updateMes(obj:Object){     
        trace("test call back ...."+obj);
        this.chatroom.receiveBroadMes(obj);
 }
  
       
     /**
      * 一个客户端发消息所以客户端都能收到
      * 调用服务端的广播方法
      * 通知所有的在线用户
      * @param mes 要发送的信息
      */  

    public function broadcastMes(mes:String):void{
        this.call("broadcastMes",null,mes);
     }
  
 
 
  //  网络连接情况              

    private function netStatus (event:NetStatusEvent):void{                         
        trace("net connection case is ........."+event.info.code);           
     }                  

   }
}

 


 

 第四步:编写服务端类

package test;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.red5.server.adapter.ApplicationAdapter;
import org.red5.server.api.IClient;
import org.red5.server.api.IConnection;
import org.red5.server.api.IScope;
import org.red5.server.api.Red5;
import org.red5.server.api.service.IServiceCapableConnection;
public class NetServer extends ApplicationAdapter{
   
 private static final Log log = LogFactory.getLog(TestCon.class);
       
 public NetServer(){        

 }   
 
 
 /**   
  * broadcast the message .notify all client
  */ 
 
 public boolean broadcastMes(String message){
  log.info("receive message is "+message) ;
  log.info("server trace 1..............") ;
  IConnection currentcon = Red5.getConnectionLocal();
 
  IScope scope = currentcon.getScope();
  
  Iterator<IConnection> conns =  scope.getConnections();
      
  /*
   * loop all the online user then broadcase message .
   */ 
   while(conns.hasNext()){        
   IConnection conn = conns.next();     
   if(conn instanceof IServiceCapableConnection){              
           IServiceCapableConnection iservice = (IServiceCapableConnection)conn ;
           iservice.invoke("updateMes",new Object[]{message});  
         }        
     }  
   log.info("server trace 2..............") ;
  
  return true ;
 }
 
}
 


 

 第五步:把元件发到主场景中

配置这里就不做说明,写的其他几遍文章都有详细说明。

你可能感兴趣的:(apache,.net,Flash)