FMS 教程(SharedObject)用户列表

FMS实现用户列表,一般都是利用List组件,和SharedObject来实现的。
接下来我就教你怎么做用户列表。ready..

先看用户端:
新建一个as2.0文档,从组件面板中拖出List组件到舞台上,命名为userList
点击时间轴第一帧,按F9

//code begin
var nc:NetConnection = new NetConnection()
nc.onStatus = function(info){
    trace(info.code)
}
nc.connect("rtmp:/userList","lulu");
//getRemote 连接到服务器远端的so,false表示是临时的so,或者true为记录在服务器。
//如果这里改为true,那么相应的在服务器端也要改为true,不然两者会冲突....
var userList_so:SharedObject  =SharedObject.getRemote("list", nc.uri, false);
userList_so.onSync = function(){
//只要列表变化 则将list清空
    _root.userlist.removeAll()
//循环so的属性,将属性添加到list中
    for(var p in this.data){
            _root.userlist.addItem(p)
    }
}
//这是最关键的,并且要在onSync 后connect
userList_so.connect(nc)
//code end


再看服务器端:
在applications目录下新建一个目录:userList
新建一个main.asc
用编辑器打开,
//code start
application.onAppStart = function ()
{
    //服务器端就不是getRemote了,而是get,这里的list和用户端的list要保持一致,意为连接到同一个so。
    //如果客户端改为true,这里也要改为true,保持一致
    userList_so = SharedObject.get ("list","false");
}
application.onConnect = function (client, name)
{
    //给client写入userName 属性,以便断开的时候读取
    client.userName = name;
    //写入属性,以用户名为属性
    userList_so.setProperty (name, name);
    return true;
}
application.onDisconnect = function(client)
{
    //断开的时候,从列表中清除
    userList_so.setProperty(client.userName,null);
}
//code end

好了,回到flash,ctrl+enter 你看到列表中的lulu了么。。。
改变nc.connect("rtmp:/userList","lulu")中的lulu 为其它用户名,另存几个flash,同时打开,看看是不是能看见所有人了?


server端会记录每一个client的所有信息,你可以往client里面写入属性,以便在需要的时候读取。
client的类型为object:
基本属性有:
ip、.secure、uri、referrer、agent、protocol
你可以在onConnect 的时候输出如下代码察看
application.onConnect = function (client, name)
{
    trace(client.ip+":"+client.protocol)
}

源文件下载

你可能感兴趣的:(Flash)