三门峡信息港
旅游
当前位置:首页 > 旅游

[冷枫]FCS编程之Client对象

发布时间:2019-10-16 23:02:27 编辑:笔名

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

张掖治疗白斑病费用
临沧白癜风好的医院
宁德妇科医院
河源治疗性病医院
泰州男科
友情链接