as学习笔记(五)--FMS相关
sshong 发表于2007年5月26日 23:52:00 更新于2008年3月21日 19:29:00
一、让FMS支持trace Object
转自:http://www.zengrong.net/?p=238
基于fczone改写的framework.asc(详见让FMS中的trace支持Object),我稍作修改,加入了对Array和Object的判断,做成了这个trace2()函数,使用前只需先load(”trace2.acs”)即可,不需要载入framework.asc。

二、Flash Communication Server并不会将修改的SO值立刻写入文件
转自:http://www.zengrong.net/?p=57
使用NetConnection.getRemote()方法可以得到对于Flash Communication Server永久的服务器端ShareObject(SO)。这种永久的SO实际上是以一个二进制文件的形式存在于服务器上的,扩展名为fso。但是据我对此文件的观察,当客户端或者服务器程序对SO值进行了修改、添加、删除等操作后,fso文件并不会立刻更新。经过多次的实验发现,FCS会在以下某种情况发生的时候更新fso文件:

客户端NC关闭
服务器端Client关闭
服务器端Application退出
调用SharedObject.flush()方法
调用SharedObject.close()方法

三、AS3连接FMS相关注意事项
转自:http://www.zengrong.net/?p=333
在使用ActionScript3的NetConnection类连接Flash Media Server或者Remoting的时候,需要注意以下几点:

1.注意设定AMF版本
ActionScript3默认使用的是AMF3,而ActionScript2和ActionScript1使用的是AMF0,如果不指定NetConnection的AMF版本,就会出现连接失败。指定的方法如下:

NetConnection.defaultObjectEncoding = flash.net.ObjectEncoding.AMF0;
上面的代码会修改所有的NetConnection实例的默认AMF版本。
如果只需要修改一个NetConnection实例的AMF版本,代码如下:

public var NC:flash.net.NetConnection;
NC = new NetConnection();
NC.objectEncoding = flash.net.ObjectEncoding.AMF0;
2.获取onStatus状态值
在ActionScript2中的方法已经不能使用,要获取NetConnection实例的连接状态,必须使用NetStatusEvent事件类,代码如下:
import flash.events.NetStatusEvent;
import flash.net.NetConnection;
  
private function statusHandler(evt:NetStatusEvent):void{
    trace(evt.info.code);
    switch(evt.info.code){
        case "NetConnection.Connect.Rejected":
            var appmsg:String = (evt.info.application == undefined) ? "" : evt.info.application;
            mx.controls.Alert(appmsg);
            break;
        case "NetConnection.Connect.Failed":
            mx.controls.Alert("连接失败");
            break;
        case "NetConnection.Connect.Closed":
            //
            break;
        case "NetConnection.Connect.Success":
            trace("连接成功!");
            break;
    }
}
  
private function login():void{
    adminNC = new NetConnection();
    adminNC.addEventListener(NetStatusEvent.NET_STATUS, statusHandler);
    adminNC.connect("http://localhost/test/test1", userName, userPWD);
}
3.在NetConnection实例中定义被呼叫方法
在ActionScript2中,我们可以使用myNC.functionName=function(){}来定义NetConnection对象中被呼叫的方法。但是,在ActionScript3中,NetConnection并非动态类,不能用这样的方法添加被呼叫方法,而必须使用client属性实现(接上例):
<font color="red">This class was dynamic in ActionScript 2.0 but is now sealed. To write callback methods for this class, you can either extend the class and define the callback methods in your subclass, or you can use the client property to refer to an object and define the callback methods on that object.</font>

import flash.events.NetStatusEvent;
import flash.net.NetConnection;
  
public function loginSuccess($adminLevel:int):void{
    trace("loginSuccess被调用,$adminLevel:" + $adminLevel);
    this.dispatchEvent(new Event("loginSuccess"));
}
  
private function login():void{
    adminNC = new NetConnection();
    adminNC.client = this;
    adminNC.addEventListener(NetStatusEvent.NET_STATUS, statusHandler);
    adminNC.connect("http://localhost/test/test1", userName, userPWD);
}
当登录成功后,FMS端会调用客户端NC的loginSuccess方法,并传回管理员的级别。在这里,为client属性赋值,告知被调用的loginSuccess方法在哪个对象中。被调用的方法必须被声明为public。

这是我自己写的(在主文档类中):
var callback:Object=new Object();
//定义该object的timeline,stage以指向主时间轴,因为在callback的响应函数里面要得到舞台上的user_list,但是在这个函数内部的this=object,不是主时间轴,所以定一个属性来指向主时间轴
callback.stg=this;
callback.getList=function(list:Array){
    /* */
};
main_nc.client=callback;

还有一些和SharedObject和NetStream类相关的注意事项,可以看这里
标签:无分类:As3&Flex阅读:3232
评论
暂无评论
添加评论
您的大名,限长10汉字,20英文(*)
电子信箱(*)
您的网站
正文,限长500汉字,1000英文(*)
验证码(*) 单击刷新验证码
联系我
博客订阅