随笔 - 8  文章 - 55  trackbacks - 0
<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用链接

留言簿(6)

随笔分类

随笔档案

文章分类

文章档案

朋友的Blog

最新评论

阅读排行榜

评论排行榜

我的聊天室开发教程(三):和服务器之间传递参数

2004年11月30日00:11星期二 [ FMS ]


在使用FCS原来的组件过程中,默认的与服务器之间传递的参数只有username变量,但是在开发自己的Flashcom应用程序时,经常需要向服务器传递更多的参数。要做到这一点,我们需要修改组件和服务器端的代码。
先举个简单的例子。在SimpleConnect组件连接服务器的时候,是通过call指令呼叫服务器端的方法。
如果我们希望客户端和服务器之间除了传递用户名之外,还想传递用户编号(便于后台操作数据库)、用户性别(用于客户端显示性别标识)、摄像头是否可用、麦克风是否可用(用于列表显示状态)等参数,可以修改服务器端的simpleconnect.asc文件connect方法,增加相应的参数:
1 : FCSimpleConnect.prototype.connect = function( client, username, userId, userSex,cam,mic) {
2 : var clocal = this.getClientLocalStorage(client);
3 : var cglobal = this.getClientGlobalStorage(client);
4 : cglobal.username = username;
5 : clocal.id = 'u' + this.getClientID(client);
6 : this.users_so.setProperty(client.id, { id:userId, name:username, sex:userSex,cam:cam,mic:mic });
7 : return clocal.id;
8 : }

接下来客户端连接FCSimpleConnect对象的方式就按照服务器端定义的方法来调用就可以了,例如:
1 : this.nc.call(this.prefix + 'connect' , res, this.username, this.UserSex, this.Camera, this.Mic);

其实这些参数在simpleconnect.asc中并没有实际的作用,只是用来说明向服务器传递变量的方法,并且方便以后的扩展。如果希望使这些参数在全局有效,可以注册服务器端全局变量。注册方式类似于:
1 : cglobal.username = username;

那么当我们需要接受服务器端的参数呢,又应该如何处理呢?下面通过peoplelist组件来看下客户端如何实现接受服务器端的参数。
服务器端people.asc中connect方法代码为:
1 : FCPeopleList.prototype.connect = function( client,userSex,cam,mic ) {
2 : var cglobal = this.getClientGlobalStorage(client);
3 : var clocal = this.getClientLocalStorage(client);
4 : clocal.id = 'u' + this.getClientID(client);
5 : userName=cglobal.username == null ? ' fc_lurker'
: cglobal.username;
6 : this.users_so.setProperty(clocal.id, { name:userName, cam:cam,mic:mic,sex:userSex,ip:client.ip });
7 : }

在连接peoplelist组件的时候,会呼叫服务器端的FCPeopleList对象的call方法。
1 : this.nc.call(this.prefix + 'connect' , null, this.UserSex, this.Camera, this.Mic );

在同步用户列表的时候,方法代码修改为:
01 : this.so.onSync = function(list) {
02 : this.owner.people_lb.removeAll();
03 : var totalUsers = 0;
04 : var totalLurkers = 0;
05 : for (var i in this.data) {
06 : if (this.data[ i ].name == ' fc_lurker'
) {
07 : totalLurkers++;
08 : } elseif (this.data[ i ].name != null) {
09 : totalUsers++;
10 : this.owner.people_lb.addItem(this.data[ i ].name,{ id:i,sex:this.data[ i ].sex,name:this.data[ i ].name,ip:this.data[ i ].ip,cam:this.data[ i ].cam,mic:this.data[ i ].mic });
11 : }
12 : }

这样,把每个用户的相关信息全部记录在list组件的data属性中,便于后续的其它操作。
另外一个比较实际的应用就是在chat组件的使用过程中,需要判断用户的身份,和发送私聊信息的时候需要知道私聊对象的名字,这些都需要扩展服务器参数。这些地方各位可以仔细参详源文件。
服务器端相关的asc文件下载:[
up/1101744642.rar ]
PS:如果需要在服务器端显示中文,请把服务器端脚本文件转换为utf8编码格式。
posted on 2006-06-08 13:56 blog搬家了--[www.ialway.com/blog] 阅读(480) 评论(0)  编辑  收藏 所属分类: FMS

只有注册用户登录后才能发表评论。


网站导航: