通用Loader

package cn.helper.load
{
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.HTTPStatusEvent;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.events.SecurityErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.system.ApplicationDomain;
import flash.system.LoaderContext;


/*****************************************************
* 通用加载类
* 参考this6的实现思路,Andy做编写、调整和修订。
* 使用方法:
*<CODE>
* var load:CommonLoader = new CommonLoader("url.swf",CommonLoader.TYPE_SWF);
* load.addEventListener(....);
* load.startLoad().
* ....
* trace(load.data);
* trace(load.getClass("symbolName",load.loaderInfo));
*</CODE>
* or
* <CODE>
* var load:CommonLoader = new CommonLoader();
* load.url = "";
* load.type = CommonLoader.TYPE_SWF;
* load.name = "loader_1";
* load.addEventListener(....);
* load.startLoad().
* ....
* trace(load.data);
* trace(load.getClass("symbolName",load.loaderInfo));
* </CODE>
* Author : Andy Chen
* Copyright (c) 2009 CITV-VINVO
* All rights reserved.
*****************************************************/

public class CommonLoader extends EventDispatcher
{
/**
* to load image
*/
public static const TYPE_IMAGE:String = "LoadImg";
/**
*to load xml file or text file
*/
public static const TYPE_XML:String = "LoadXML";
/**
* to load swf
*/
public static const TYPE_SWF:String = "LoadSwf";


private var loader:Loader;
private var urlLoader:URLLoader;
private var urlRequest:URLRequest;
private var context:LoaderContext;

private var _url:String;
private var _type:String;

private var _name:String;
private var _data:Object;
private var _loaderInfo:LoaderInfo;


/**
* the name of a commonLoader initialized
* @return
*/
public function get name():String
{
return _name;
}

/**
* the name of a commonLoader initialized
* @param value
*/
public function set name(value:String):void
{
_name = value;
}

/**
* the url of the file which you will need to load
* @return
*/
public function get url():String
{
return _url;
}

/**
*the url of the file which you will need to load
* @param value
*/
public function set url(value:String):void
{
_url = value;
}

/**
* the type of the file you will load
* @return
*/
public function get type():String
{
return _type;
}
/**
* the type of the file you will load
* @param value
*/
public function set type(value:String):void
{
switch (value)
{
case TYPE_IMAGE:
case TYPE_XML:
case TYPE_SWF:
_type = value;
break;
default:
throw new Error("加载类型没有找到");
break;
}

}

/**
* get the data loaded
* if you loaded a xml ,you will get a data as xml
* if loaded a imageformat file,you will get data as bitmap
* and get MC data with swf type
* @return
*/
public function get data():*
{
if(!_data) setData();

return _data;
}

/**
* loaderInfo
* @return
*/
public function get loaderInfo():LoaderInfo
{
if(type!=TYPE_IMAGE && type!=TYPE_SWF)
throw new Error("当前加载类型不存在loaderInfo对象");

return _loaderInfo;
}


/**
* constructor
* @param _url
* @param _type
* @param _context
* @throws Error
*/
public function CommonLoader(_url:String = "", _type:String = TYPE_SWF, _context:LoaderContext = null)
{
if (StringUtil.trim(_url).length == 0)
return;

url = _url;

if (_context && _context is LoaderContext)
context = _context;

type = _type;

//startLoad();

}

/**
* get the symbol class you have difined in swf with
* <code>ApplicationDomain</code>
*
* name:symbol name. e.g. <code>cn.wenziguo.AndyChen</code>
* info: LoadInfo. <code>null </code>or
*<code>commonLoader.loaderInfo</code>
*
*
* return a Class or null
*/
public function getClass(name:String, info:LoaderInfo = null):Class
{
if (type != TYPE_SWF)
{

throw new Error("当前加载的不是SWF,不能调用 getClass(..) 方法");

return null;
}

try
{

if (info == null)
{
return ApplicationDomain.currentDomain.getDefinition(name) as Class;
}
else
{
return info.applicationDomain.getDefinition(name) as Class;
}
}
catch (e:ReferenceError)
{
trace("定义 " + name + " 不存在");
//throw new Error("定义 " + name + " 不存在");

return null;
}
return null;
}


/**
* start to load.
* this method will must be called to load file
* after you defined a loader
*/
public function startLoad():void
{
switch (type)
{
case TYPE_IMAGE:
case TYPE_SWF:
loader = new Loader();

urlRequest = new URLRequest(url);

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
loader.contentLoaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS, onHttpStatusHandler);
loader.contentLoaderInfo.addEventListener(Event.INIT, onInitHandler);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onIOErrorHandler);
loader.contentLoaderInfo.addEventListener(Event.OPEN, onOpenHandler);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityHandler);
loader.contentLoaderInfo.addEventListener(Event.UNLOAD, onUnloadHandler);

if (context != null)
{
loader.load(urlRequest, context);
}
else
{
loader.load(urlRequest);
}

break;

case TYPE_XML:

urlLoader = new URLLoader();
urlRequest = new URLRequest(url);

urlLoader.addEventListener(Event.COMPLETE, onCompleteHandler);
urlLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, onHttpStatusHandler);
urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onIOErrorHandler);
urlLoader.addEventListener(Event.OPEN, onOpenHandler);
urlLoader.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityHandler);

urlLoader.load(urlRequest);

break;
}
}

//================================================================
// the area of private functions
//================================================================
private function removeListener():void
{
switch (type)
{
case TYPE_IMAGE:
case TYPE_SWF:
if (loader && loader.contentLoaderInfo)
{
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onCompleteHandler);
loader.contentLoaderInfo.removeEventListener(HTTPStatusEvent.HTTP_STATUS, onHttpStatusHandler);
loader.contentLoaderInfo.removeEventListener(Event.INIT, onInitHandler);
loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, onIOErrorHandler);
loader.contentLoaderInfo.removeEventListener(Event.OPEN, onOpenHandler);
loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgressHandler);
loader.contentLoaderInfo.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityHandler);
loader.contentLoaderInfo.removeEventListener(Event.UNLOAD, onUnloadHandler);

}
break;
case TYPE_XML:
if (urlLoader)
{
urlLoader.removeEventListener(Event.COMPLETE, onCompleteHandler);
urlLoader.removeEventListener(HTTPStatusEvent.HTTP_STATUS, onHttpStatusHandler);
urlLoader.removeEventListener(IOErrorEvent.IO_ERROR, onIOErrorHandler);
urlLoader.removeEventListener(Event.OPEN, onOpenHandler);
urlLoader.removeEventListener(ProgressEvent.PROGRESS, onProgressHandler);
urlLoader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityHandler);
}
break;
}

}

private function setData():void
{
switch (type)
{
case TYPE_IMAGE:
case TYPE_SWF:
if (loader)
{
//_loaderInfo = evt.currentTarget as LoaderInfo;
_loaderInfo = loader.contentLoaderInfo;

_data = loader.content;
}

break;

case TYPE_XML:

if (urlLoader)
{
_data = urlLoader.data;
}
break;
}

}

//================================================================
// the erea of events
//================================================================

private function onCompleteHandler(evt:Event):void
{

setData();

removeListener();

dispatchEvent(evt);
}

private function onProgressHandler(evt:ProgressEvent):void
{

trace("evt.bytesLoaded / evt.bytesTotal------:"+evt.bytesLoaded / evt.bytesTotal + "");

dispatchEvent(evt);

}

private function onUnloadHandler(evt:Event):void
{
removeListener();
dispatchEvent(evt);
}

private function onIOErrorHandler(evt:IOErrorEvent):void
{
removeListener();

dispatchEvent(evt);
}

private function onSecurityHandler(evt:SecurityErrorEvent):void
{
removeListener();

dispatchEvent(evt);
}


private function onOpenHandler(evt:Event):void
{
dispatchEvent(evt);
}

private function onInitHandler(evt:Event):void
{
dispatchEvent(evt);
}


private function onHttpStatusHandler(evt:HTTPStatusEvent):void
{
dispatchEvent(evt);
}


}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值