通用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);
		}


	}
}

你可能感兴趣的:(.net,xml,Security,Flash)