申请个园子的blog真是不容易!发个as聊天室!

献丑了.
基本功能部分,
/**
 * @author webabc
 
*/

import mx.controls.Button;
import mx.controls.List;
import mx.controls.TextArea;
import mx.controls.TextInput;

class Wbchat 
{
    private 
var url="rtmp://localhost/wbchat";
    private 
var mync ;
    private 
var my_rso ;
    private 
var IDNUM = "webadmin";
    private 
var IDPASS = "456";
    private 
var mylist:List;
    private 
var _btlogin:Button;
    private 
var _btsend:Button;
    private 
var _chattxt:TextArea;
    private 
var _talktxt:TextInput;
    private 
var _usn;
    private 
var _root;

    
    
    
//初始化远程共享要利用nc通道
    public function Wbchat(root:MovieClip)
    
{   
        _root
=root;
        mylist
=root.mylist;
        _btlogin
=root.btlogin;
        _btsend
=root.btsend;
        _chattxt
=root.chattxt;
        _talktxt
=root.talktxt;
        
var self=this;
        _btlogin.onRelease
=function ()
        
{
        self.coon();
        }

        _btsend.onRelease
=function()
        

            self.post();
            
            }

            
        
        
    }

   
//发消息函数
    public function post():Void
    
{  
        _talktxt
=_root.talktxt;
        trace(_talktxt.text);
        
//如果不存在talklist就建一个,这里没用server端,是个技巧
        if (my_rso.data.talklist[0== undefined) {
            my_rso.data.talklist 
= [];
        }

        
//限制数组长度,是个队列。保证里边有5条消息,当然也可以更多,但如果没有限制,flash会垮的
        if (my_rso.data.talklist.length>=20{
            my_rso.data.talklist.shift();
        }

        
//把消息装到so里
         my_rso.data.talklist.push(_root.usn.text+"说:"+_talktxt.text);
        _talktxt.text 
= "";
    }

    
    private 
function coon():Void
    
{   _usn=_root.usn.text;
       
        trace(
"u is :"+_usn);
        mync
= new NetConnection();
        mync.connect(url,_usn, IDPASS);
        
var self = this;
        
      mync.onlineList 
= function(list) {
            trace(
"u is :"+list);
            self.mylist.labels 
= list;
           }
;
   
      mync.reroom 
= function(list) {
            
//填充List组件
            trace("room is :"+list);
            
//room = list;
        }
;
      mync.onStatus 
= function(info) {
          trace(info.code);
           
if (info.code == "NetConnection.Connect.Success"{
            
//成功则利用此nc初始化rso
            self.initRSO(this);
            }

       }
;
    }

    private 
function initRSO(NC) {
    
        my_rso 
= SharedObject.getRemote("myRSO", NC.uri, true);
        
var self=this;
        my_rso.onSync 
= function() {
        self._root.chattxt.text
="aa";
            
var t = this.data.talklist;
            
for (var i = 0; i<t.length; i++{
            trace(
"tc:"+t[i]);
            self.writeln(t[i]);
             }

        
            }
;
    
            my_rso.connect(NC);
        
    }

    
//文字显示,换行
    private function writeln(msg) {
        _chattxt.text 
+= msg+"\n";
        
//_talktxt.vPosition =_talktxt.maxVPosition;
    }

//_root.bt1.onRelease= function () {
    //my_rso.data.x = _root._xmouse;
    //}

}

服务器端部分
 1application.onAppStart=function(){
 2    
 3    this.onlineList=[];//在线列表
 4    application.init();//遇处理函
 5    
 6    }

 7application.onConnect=function(newClient,IDNUM,IDPASS){
 8
 9    newClient.IDNUM=IDNUM
10    //newClient.IDPASS=IDPASS
11    //处理在线数组(push)
12    
13    this.onlineList.push(IDNUM)
14    this.acceptConnection(newClient);
15    //广播给client
16    
17    for(var i=0;i<this.clients.length;i++){
18         this.clients[i].call("onlineList",null,this.onlineList)
19         this.clients[i].call("reroom",null,this.room)
20        }

21        
22    
23    }

24application.onDisconnect = function (newClient){
25
26    trace("------user disconnected------");
27    //处理在线数组(splice)
28    for(var i=0;i<=this.clients.length;i++){
29        if(this.onlineList[i]==newClient.IDNUM){
30            this.onlineList.splice(i,1)
31            }

32        }

33   //广播
34    for(var i=0;i<this.clients.length;i++){
35        this.clients[i].call("onlineList",null,this.onlineList)
36        }

37}

38//客户端呼叫的事件
39Client.prototype.msgfromclient=function(what){
40  trace(what+"进来")
41
42 var aa="呼叫成功并返回结"
43    return aa
44  
45  }

46//系统初始化函
47application.init =function ()
48{  
49    }

50

posted on 2007-04-07 01:48  斯文  阅读(467)  评论(0编辑  收藏  举报

导航