ver1에서는 단독형으로 진행이 되었던 것이고, 요번 버전은 고아로 생성하여 동시에 여러개를 호출 할 수 있는 코딩 기법을 사용하였다. 닷넷 랭귀지와 사용한 코드로 progress에 대한 것은 처리가 안되어있고, 로딩된 데이터만 처리가 가능하도록 실행할 메서드를 null로서 예외 처리를 하였다.

AS3 code

1
2
3
4
5
6
7
8
import com.dao.GetXML;
private function init():void
{
	GetXML.getXML(xmlPath, inputReferMethod, enterMethod);
	// or GetXML.getXML(xmlPath, inputReferMethod);
}
private function inputReferMethod(xml:XML = null):void {}
private function enterMethod():void {}

AS3 code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/**
 * @author jin_u, jinuiny@ghost-corps.com, www.jinustudio.com/blog
 * @since 2009.6.28
 * @version 0.0.2
 */
package com.dao 
{
	/**
	 * 플래시 기본 API 클래스
	 */
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.events.IOErrorEvent;
 
	/**
	 * XML 데이터 정보를 관리한다.
	 */
	final public class GetXML
	{
		/** Private Properties */
		private var inputReferMethod:Function;
		private var enterMethod:Function;
 
		public function GetXML(xmlPath:String = "", setXMLFunc:Function = null, enterFunc:Function = null)	
		{
			trace("## XML :: getXML() = ", xmlPath);
			if (xmlPath == null) return;
 
			/** XML 데이터 값을 리턴 받을 참조 메서드 */
			this.inputReferMethod = setXMLFunc;
			/** XML 데이터 완료시 실행할 참조 메서드 */
			this.enterMethod = enterFunc;
 
			var ul:URLLoader = new URLLoader();
 
			ul.addEventListener(Event.COMPLETE, onCompleteXML);
			ul.addEventListener(IOErrorEvent.IO_ERROR, onErrorXML);
 
			ul.load(new URLRequest(xmlPath));
		}
 
		/**
		 * XML 데이터를 로드하는 메서드
		 * @param xmlpath : 호출할 경로.
		 * @param setXMLFunc : 로드가 완료 될 시에 XML 데이터를 파라메터로 받기 위한 메서드.
		 * @param enterFunc : 로드가 완료 될 시에 실행할 메서드로서 enterMethod에 참조하여 실행되게 처리 됨.
		 */
		public static function getXML(xmlPath:String = "", setXMLFunc:Function = null, enterFunc:Function = null):GetXML
		{
			return new GetXML(xmlPath, setXMLFunc, enterFunc);
		}
 
 
		/**
		* XML 이벤트 핸들러 정의
		*/
		/** COMPLETE */
		private function onCompleteXML(e:Event = null):void
		{
			trace("## XML :: onCompleteXML()")
 
			var xml:XML = XML(e.target.data);
			trace("## XML :: onComplete =", xml);
 
			/** 이벤트를 제거 한다 */
			e.currentTarget.removeEventListener(Event.COMPLETE, this.onCompleteXML);
			e.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR, this.onErrorXML);
 
			/** XML 데이터를 호출 할때 코어쪽에 데이터를 입력하기 위한 설정 메서드에 값을 인자로 넘긴다. */
			this.inputReferMethod(xml);
			/** XML 로드가 완료가 되면 실행 등록한 메서드를 실행한다. */
			if (this.enterMethod != null)
			{
				this.enterMethod();
			}
		}
		/** IO_ERROR */
		private function onErrorXML(e:IOErrorEvent = null):void
		{
			trace("## XML :: onError");
		}
 
	}
 
}