as3与red5通信---学习三

本文介绍了一个简单的聊天室组件实现过程,分为五步:创建Flash聊天室元件、编写绑定类、客户端连接类、服务端类,并将元件放置到主场景中。通过这些步骤,实现了消息的发送、接收及广播。

 

 

 


 

第一步:新建元件

包括三部分

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 ;
 }
 
}
 


 

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

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值