用FMS做聊天室其实很简单,如果用组件。不到5分钟就能完成一个基本功能的聊天室了,但如果有各类需求,就需要自行开发了。
1 聊天记录问题:
一般分为3类
(1).不记录聊天内容
比较简单,通过Client发送内容来后,直接用 application.broadcastMsg 或call 反馈给其他用户
(2).暂时记录聊天内容,一段时间或条件后删除
根据记录内容的多少来确定,如果记录内容较少直接在服务端用变量来记录,如果内容较多则用SharedObject
(3).长久记录聊天内容
同样2种方法,采用SharedObject记录,或用File类也能达到目的
2 私聊和用户级分组
(1).私聊,其实也很简单。通过遍历 application.clients对象,根据自己的条件对其中的对象call
for (var i = 0; i<application.clients.length; i++) {
if(application.clients[i].Name=="羽柴"){
application.clients[i].call("显示聊天",null,txt)
}
}
//以上一个简单的例子表示,对用户名叫羽柴的 client进行私聊,只把发送的内容 call给羽柴显示。 其他人则收不到聊天内容
(2).分组
聊天室一般 分有管理员 用户 会员 或等等 据有特殊权限的用户组
实现方法:
先把所有人的权限拥有的功能定义成一个function 当登录的时候判断该用户属于的级别后,再为其添加该用户的function 这样就达成了管理员只有管理员的方法,而玩家无法调用管理员的function
之前见到网上有的例子,不论管理员或一般用户的所有方法都定义到Client里面。则
Client.聊天=function(){}
Client.踢人=function(){}
Client.表情=function(){} ....等等
只 是在客户端中 一般用户不调用罢了, 这样的做法是很错误的。 如果把所有的功能都添加到Client安全则是很差的,相信都知道flash 被反编译性是很高的,这样一旦客户端被反编了,知道了调用方法。那就相关于一般会员也具备了管理员的功能。正确的方法应该是分类式的把方法传入 如下:
application.onConnect = function(newClient, userName, userPsd,userClass,team) {
if(在此处根据自己的情况判断用户级别){
//如果是管理员,则添加管理员方法
newClient.聊天=聊天
newClient.踢人=踢人
}else if(一般会员){
//如果是一般会员 添加一般会员的方法
newClient.聊天=聊天
}
};
function 聊天(){
.....
}
function 踢人(){
.....
}
//
//以上只是一个例子简示,从以上例子可以看到,当判断了是管理员权限的,则添加踢人和聊天的方法给该用户
如果只是一般用户的 则只添加聊天给他。这样就能做到,一般用户就算调用踢人 方法也是无效的。
//=====================================
/ 转载:羽柴 鬼铃-blog
// www.ycflash.com/blog