科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件[冷枫]FCS编程之Client对象

[冷枫]FCS编程之Client对象

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

FCS编程之Client对象

作者:冷枫 来源:CSDN 2007年9月23日

关键字: 冷枫 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 : };
 
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=857001
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章