基于FMS的AS3聊天室源代码

若要运行此例,请在你的机器上装上FMS3,安装时一切操作都默认,安装成功后在C:\Program Files\Adobe\Flash Media Server 3\applications目录下新建一个文件夹名为talk。

新建一个fla文件,在场景中绘制一个输入文本框,实例名为in_txt,再绘制一个输入文本框,实例名为user_txt,拖入3个按钮组件,参数里的label分别为“清空聊天记录”“查看聊天记录”“发送”,三个按钮的实例名分别为clear_talklist_btn,talklist_btn,send_btn。文档类中填写main。

读者自己可以对界面进行简单的布局。

在同目录下新建一个名为main.as的as文件,在其中输入以下代码:

package {
import flash.display.MovieClip;
import flash.net.NetConnection;
import flash.net.SharedObject;
import flash.events.NetStatusEvent;
import flash.events.SyncEvent;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.text.TextField;
import flash.text.TextFormat;
import fl.controls.TextArea;
import fl.controls.Button;
public class main extends MovieClip {
   private var so:SharedObject;
   private var so1:SharedObject;
   private var nc:NetConnection;
   private var mytextformat:TextFormat;
   private var outTxt:TextArea;
   private var mydate:Date;
   public function main():void {
    so1=SharedObject.getLocal("myname");
    settextformat();//设置文本格式
    buildUI();//设计界面
    nc=new NetConnection();
    setlisteners();
    nc.connect("rtmp://localhost/talk");
    readlocaldata();//读取本地数据
   }
   private function readlocaldata():void {
    try {
     user_txt.text=so1.data.myname;
    } catch (error:Error) {
     user_txt.text="talker";
     //trace("不存在该本地共享对象");
    }
   }
   private function buildUI():void {
    //设计界面
    outTxt=new TextArea;
    outTxt.setSize(350,300);
    outTxt.x=10;
    outTxt.y=10;
    outTxt.editable=false;
    outTxt.setStyle("textFormat",mytextformat);
    addChild(outTxt);

   }
   private function settextformat():void {
    //设置文本格式
    mytextformat=new TextFormat;
    mytextformat.size=13;
    mytextformat.color=0x0000FF;
   }
   private function setlisteners():void {
    nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
    send_btn.addEventListener("click",sendmsg);
    user_txt.addEventListener(Event.CHANGE,txtchange);
    stage.addEventListener(KeyboardEvent.KEY_UP,keyup);
    talklist_btn.addEventListener("click",show_talklist);
    clear_talklist_btn.addEventListener("click",clear_talklist);
   }
   private function clear_talklist(event):void{
    so1.data.talklist="";
   }
   private function show_talklist(event):void{
    outTxt.text=so1.data.talklist;
   }
   private function txtchange(event:Event):void {
    //用户名文本文字改变时,用户名数据保存到本地
    so1.data.myname=user_txt.text;
    so1.flush();
    //trace(1);
   }
   public function netStatusHandler(event:NetStatusEvent):void {
    //trace("connected is: " + nc.connected );
    //trace("event.info.level: " + event.info.level);
    //trace("event.info.code: " + event.info.code);

    switch (event.info.code) {
     case "NetConnection.Connect.Success" :
      //trace("Congratulations! you're connected");
      so = SharedObject.getRemote("talk", nc.uri, false);
      so.connect(nc);
      so.addEventListener(SyncEvent.SYNC, syncHandler);
      break;
     case "NetConnection.Connect.Rejected" :
     case "NetConnection.Connect.Failed" :
      trace("Oops! you weren't able to connect");
      break;
    }
   }
   private function syncHandler(event:SyncEvent):void {
    // when a sync event is fired
    // update the position of the ball in clients
    try {
     if (so.data.message!=undefined) {
      outTxt.appendText(so.data.user+" 在 "+so.data.date+" 说:\n"+so.data.message+"\n");
      so1.data.talklist+=so.data.user+" 在 "+so.data.date+" 说:\n"+so.data.message+"\n";
      outTxt.verticalScrollPosition = outTxt.maxVerticalScrollPosition;
     }
    } catch (error:Error) {
     //
    }

   }
   private function send():void {
    if ( so != null ) {
     so.setProperty("message", in_txt.text);
     so.setProperty("user",user_txt.text);
     mydate=new Date;
     so.setProperty("date",mydate.getFullYear()+"-"+Number(mydate.getMonth()+1)+"-"+mydate.getDate()+" "+mydate.getHours()+":"+mydate.getMinutes());
     in_txt.text="";
    }
   }
   private function keyup(event:KeyboardEvent):void {
    if (event.keyCode==13) {
     send();
    }
   }
   function sendmsg( event ):void {
    // update the shared object when a user moves the ball
    // this fires a sync event
    send();
   }
}
}

好了,Ctrl+Enter就可以看到效果了。

效果图如下:

基于FMS的AS3聊天室源代码 - arthur - Arthur

posted @ 2011-01-21 17:43  rob_2010  阅读(612)  评论(0编辑  收藏  举报