申请个园子的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;
//}
}
* @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
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