首先声明:读SharedObject是一个耗时的操作。
package{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.SharedObject;
import flash.utils.ByteArray;
import load.LoadEvent;
import load.LoadFileBase;
import load.LoadFileData;
/***完成本地共享对象的读取,版本比较,加载,替换等操作.*/
public class LocalRunLib extends Sprite
{
public const LOADFAILED:String="load_local_Lib_failed";
public const LOADSUCCESS:String="load_local_Lib_success";
private var ver:String;
public var Lib:*;
public function LocalRunLib():void{
getLib("Lib.swf","0708a01");
addEventListener(LOADSUCCESS,testSuccess);
addEventListener(LOADFAILED,testFailed);
}
private function testSuccess(event:Event):void{
trace(event.target.Lib.applicationDomain.getDefinition("Tt"));
}
private function testFailed(event:Event):void{
trace(event.target);
}
/***获取运行库.*@param_url获取本地失败后,向远程加载.*@paramver当前需要的版本.*/
private function getLib(_url:String,ver:String):void{
var flag:Boolean=false;
var share:SharedObject=SharedObject.getLocal("resources");
var Obj:Object=share.data;
this.ver=ver;
if(Obj!=null)
if(Obj.version==ver){
converToLib(Obj.lib);
flag=true;
}
share.close();
share=null;
if(!flag){
var loadFile:LoadFileBase=new LoadFileBase(newLoadFileData(_url,LoadFileBase._SWF));
loadFile.addEventListener(LoadFileBase.SUCCESS,success);
loadFile.addEventListener(LoadFileBase.FAILED,failed);
}
}
/***将共享对象变成可运行的库.*/
private function _onLoaderComplete(event:Event):void{
Lib=event.currentTarget;
event.target.removeEventListener(Event.COMPLETE,_onLoaderComplete);
dispatchEvent(new Event(LOADSUCCESS));
}
/***写入到库.*/
private function writeLocalLib(swf:*,ver:String):*{
var share:SharedObject=SharedObject.getLocal("resources");
share.data.version=ver;
share.data.lib=swf;
share.flush();
share.close();
share=null;
}
/****将二进制内容转化为可运行库.*/
private function converToLib(data:ByteArray):void{
var loader:Loader=new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,_onLoaderComplete);
loader.loadBytes(data);
}
/***加载指定url的运行库成功.*/
private function success(event:LoadEvent):void{
converToLib(event.loadData.data as ByteArray);
writeLocalLib(event.loadData.data,ver);
removeEvent(event.target as LoadFileBase);
}
/***加载指定url的运行库失败.*/
private function failed(event:LoadEvent):void{
removeEvent(event.targetasLoadFileBase);
dispatchEvent(new Event(LOADFAILED));
}
/***删除事件.*/
private function removeEvent(loadFile:LoadFileBase):void{
loadFile.removeEventListener(LoadFileBase.SUCCESS,success);
loadFile.removeEventListener(LoadFileBase.FAILED,failed);
}
}
}
没有评论:
发表评论