FCS编程之Client对象

Client对象包含了每个联机用户的信息,例如:客户端的IP地址、Flash和操作系统的信息、分配用户的频宽以及呼叫客户端的函数。该对象必须在服务器端使用。
Clinet对象经常用来呼叫客户端定义的方法,使用Client.call方法
例如我们在客户端定义了一个获取随机数的方法
1 : nc = new NetConnection();
2 : nc.connect ('rtmp://someserver/someApp/someInst');
3 : nc.random = function(){
4 : return (Math.random());
5 : };

需要在服务器端使用该方法时,就可以通过client对象的call方法
01 : application.onConnect = function(clientObj){
02 : trace('we are connected');
03 : application.acceptConnection(clientObj);
04 : clientObj.call('random', new randHandler());
05 : };
06 : randHandler = function(){
07 : this.onResult = function(res){
08 : trace('random num: ' + res);
09 : }
10 : this.onStatus = function(info){
11 : trace('failed and got:' + info.code);
12 : }
13 : };

第二个参数是返回对象,如果有参数需要传递,依次跟在后面就可以了。
Client对象可以方便地获取某个客户端的相关信息,包括:
Client.agent 客户端的平台和版本信息
Client.ip 客户端的 IP 地址
Client.protocol 客户端连接到服务器的协议
Client.readAccess 客户端具有读操作的权限列表
Client.referrer 客户端swf文件的URL地址
Client.writeAccess 客户端具有写操作的权限列表
使用方法如下:
1 : application.onConnect = function(client){
2 : if (client.ip == '127.0.0.1'){
3 : // insert code here
4 : } else {
5 : // insert code here
6 : }
7 : };

请注意不要和application.clients属性相混淆,application.clients是所有联机用户的列表
application.clients[ i ]表示某个Client对象的实例
我们可以这样访问客户端对象的属性,
1 : for ( var i = 0; i < application.clients.length; i++) {
2 : trace(application.clients[ i ].ip);
3 : }


关于限制带宽的两个方法
Client.getBandwidthLimit 取得带宽限制值,分别取得客户端到服务器端以及服务器端到客户端的带宽限制,如:
1 : application.onConnect = function(newClient){
2 : var clientToServer= newClient.getBandwidthLimit(0);
3 : var serverToClient= newClient.getBandwidthLimit(1);
4 : };

Client.setBandwidthLimit(iServerToClient,iClientToServer) 设置带宽限制值
如果某个参数设为0,表示不改变当前的设置值。
查询客户端是否和服务器保持连通状态可以使用Client.ping方法,如
1 : application.onConnect( newClient ) {
2 : if ( newClient.ping() ){
3 : trace('ping successful');
4 : }
5 : else {
6 : trace('ping failed');
7 : }
8 : }

注意有时候ping方法的响应时间比较久,要最有效的侦测客户端是否和服务器端保持连通的方法是client和server端作相向回覆。
如果所有的客户端对象的实例都需要使用相同的属性和方法的时候,你可以把该属性和方法扩展到类中,而不需要在客户端为每一个实例创建方法。这样可以减少客户端的内存占用。这个过程称为类的扩展,你可以扩展任何客户端或服务器端的类。
扩展的方法或属性不需要在类的架构函数中声明(在架构函数中声明的方法和属性在每个实例初始化的时候都会分配一次),通过prototype属性来扩展的方法和属性在所有类的实体中都可以使用。
下面我们来看个例子,
1 : application.onConnect = function(clientObj){
2 : clientObj.birthday = myBDay;
3 : clientObj.calculateDaysUntilBirthday = function(){
4 : // insert code here
5 : }
6 : };
如果你希望一些方法和属性能够被所有application.clients数组中的客户端使用,而不需要每次都定义。我们就可以通过对Client对象扩展,我们首先定义好需要的方法
1 : function Client_getWritePermission(){
2 : return this.writeAccess;
3 : }
4 : function Client_createUniqueID(){
5 : var ipStr = this.ip;
6 : var uniqueID = 're123mn'
7 : return uniqueID;
8 : }

然后给Client对象的prototype属性添加我们定义的方法
1 : Client.prototype.getWritePermission = Client_getWritePermission;
2 : Client.prototype.createUniqueID = Client_createUniqueID;
3 :
你也可以添加属性给Clent对象,如
Client.prototype.company = 'Macromedia';
这些方法和属性对于任何一个Client对象的实例都时可用的。
1 : application.onConnect = function(clientObj){
2 : var clientID = clientObj.createUniqueID();
3 : var clientWritePerm = clientObj.getWritePermission();
4 : };
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值