`
cloud21
  • 浏览: 396454 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

通用Loader

    博客分类:
  • Flex
阅读更多
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);
		}


	}
}
分享到:
评论

相关推荐

    嵌入式系统Boot Loader 技术内幕

    Boot Loader 是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立...尽管如此,我们仍然可以对 Boot Loader 归纳出一些通用的概念来,以指导用户特定的 Boot Loader 设计与实现。

    嵌入式系统 Boot Loader 技术内幕

    在嵌入式的背景下,Boot Loader 高度依赖于硬件特性,因此,几乎不存在一种能够适用于所有嵌入式系统的通用 Boot Loader。 #### Boot Loader 的主要任务 1. **硬件初始化**:启动过程中,Boot Loader 负责初始化...

    sqlloader

    相比编写自定义程序来加载数据,SQL*Loader作为一款通用工具,可以极大地减少开发工作量,提高数据加载效率。Oracle持续优化SQL*Loader,增加了对直接路径加载和并行加载的支持,进一步提高了数据加载速度,使其在...

    flash-loader-demo-v2.8.0官网下载en.flasher-stm32

    "flash-loader-demo-v2.8.0"是一个专门针对STM32的串口固件加载器,支持通过UART(通用异步收发传输器)接口来下载HEX和BIN格式的文件。这个工具是英文版,名为"en.flasher-stm32",为开发者提供了灵活且高效的程序...

    Loader正规的刷机流程

    - **通用性**:无论您的黑莓手机型号如何,均可使用任意版本的桌面管理器(DM)。不同版本的DM主要区别在于其功能的丰富程度。 - **操作系统要求**:如果您使用的是Windows 7或更高版本的操作系统,则需要确保下载的...

    flash_loader_demo_v2.8.0

    串口通信,即UART(通用异步收发传输器),是一种常见的串行通信方式,通常用于设备间的短距离通信。STM32的UART接口支持全双工通信,可以同时发送和接收数据,而且配置灵活,可适应不同速度和数据格式的需求。 在...

    前端开源库-preprocess-loader

    `preprocess-loader`是一个专门的预处理加载器,它的功能是为各种预处理语言提供一个通用的接口。这意味着开发者可以使用这个加载器来处理任何支持的语言,比如TypeScript、Pug、SCSS等,而不需要为每种语言安装单独...

    Flash_Loader

    Flash_Loader的主要功能在于通过串行接口,如UART(通用异步收发传输器),将固件程序加载到ST微控制器的闪存中。它支持多种ST系列MCU,包括但不限于STM8和STM32家族,这些微控制器广泛应用于各种嵌入式系统,如...

    stm8串口下载软件 Flash_Loader_Demonstrator_v2.2.0

    6. **串行通信**:使用串行接口进行通信,常见的如UART(通用异步收发传输器),这种接口普遍存在于各种嵌入式系统中,易于实现。 7. **安全特性**:软件可能提供了一些安全特性,例如防止非法编程或读取,保护用户...

    RAppID_Boot_Loader_Utility_v1.6.7.35

    6. **兼容性**:RAppID Boot Loader Utility兼容多种LIN控制器,确保在不同硬件平台上的通用性。 7. **文档齐全**:除了软件本身,还提供了详细的使用手册和技术文档,帮助开发者快速上手和深入理解Boot Loader的...

    LoaderRunner 函数篇

    LoaderRunner 函数篇 LoaderRunner 是一个功能强大且广泛应用于性能测试和压力测试的自动化测试工具。它提供了丰富的函数库,允许用户灵活地定义和控制测试用例的执行。下面我们将详细讲解 LoaderRunner 的三个...

    Flash_Loader_Demonstrator_v2.6.0_Setup.zip

    该软件利用了ST的串行Bootloader功能,允许用户在不依赖其他硬件编程器的情况下,通过UART(通用异步收发传输器)接口对微控制器进行编程。这对于开发阶段以及现场升级非常方便。 在使用Flash Loader Demonstrator...

    flash as3 加载外部swf jpg gif png loader urlloader的通用代码

    var loader:Loader = new Loader(); ``` #### 2.2 设置Loader对象的位置 ```actionscript loader.x = SHOW_X; loader.y = SHOW_Y; ``` 其中 `SHOW_X` 和 `SHOW_Y` 是预先定义好的变量,表示加载后的资源在舞台上...

    Flash_Loader_Demonstrator_V2.0

    Flash_Loader_Demonstrator_V2.0是一款专为STM32设计的串口固件下载工具,它提供了通过UART(通用异步收发传输器)接口进行程序更新的便捷方式。本文将详细介绍如何使用Flash_Loader_Demonstrator_V2.0进行STM32的...

    Flash_Loader_Demonstrator_v2.6.0

    Flash Loader Demonstrator 是一个强大的软件工具,它支持通过UART(通用异步收发传输器)接口对目标板上的STM32微控制器进行固件更新。这种非侵入式的下载方式无需专门的JTAG或SWD调试接口,大大简化了开发过程中的...

    Flash Loader Demonstrator

    UART(Universal Asynchronous Receiver/Transmitter),通用异步收发传输器,是一种常见的串行通信接口,用于设备间的通信。在Flash Loader Demonstrator中,UART被用来在PC和STM单片机之间建立通信链路,实现程序...

    flash_loader_demo_v2.7.0

    该程序的核心是STM32的ISP技术,它允许用户通过UART(通用异步收发传输器)接口,在不使用专门的编程器或JTAG接口的情况下,实现程序的烧录和调试。这大大简化了开发过程,特别是在产品调试和维护阶段,能够快速更新...

    x-loader-beagleboard

    3. 初始化基本的外围设备:如GPIO(通用输入/输出)、时钟控制器、中断控制器等。 4. 加载U-Boot:一旦硬件初始化完成,X-Loader会将U-Boot加载到RAM中,然后跳转执行,U-Boot继续完成更复杂的初始化任务,如设备...

Global site tag (gtag.js) - Google Analytics