第一步:新建元件
包括三部分
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 ;
}
}
第五步:把元件发到主场景中
配置这里就不做说明,写的其他几遍文章都有详细说明。