package { import flash.display.Sprite; import flash.events.*; import flash.net.*; public class MultiXmlLoader extends EventDispatcher { //EVENTS: public static const XML_LOAD_START :String = "xml_load_has_started"; public static const XML_LOAD_PROGRESS :String = "xml_load_in_progress"; public static const XML_LOAD_COMPLETE :String = "xml_load_is_complete"; public static const MULTI_LOAD_START :String = "multi_load_has_started"; public static const MULTI_LOAD_COMPLETE :String = "multi_load_is_complete"; //PUBLIC VARS: public var xml_data :XML; public var i_xmlBytesLoaded :Number; public var s_currentXmlAddress :String; //PRIVATE VARS: private var a_addresses :Array = new Array(); private var multiLoader :URLLoader; private var i_counter :Number = 0; //---- //CONSTRUCTOR: public function MultiXmlLoader() { trace("MultiXmlLoader made !"); setupLoader(); } //PUBLIC METHODS: public function storeAddress( address:String ):void { a_addresses.push( address ); } public function startLoad():void { dispatchEvent( new Event( MULTI_LOAD_START, true ) ); load(); } //PRIVATE METHODS: private function setupLoader():void { xml_data = new XML(); multiLoader = new URLLoader( ); multiLoader.addEventListener( Event.COMPLETE, completedListener ); multiLoader.addEventListener( ProgressEvent.PROGRESS, progressListener ); } private function load():void { if ( i_counter < a_addresses.length) { var request:URLRequest = new URLRequest( a_addresses[ i_counter ] ); multiLoader.load( request ); s_currentXmlAddress = a_addresses[ i_counter]; dispatchEvent( new Event( XML_LOAD_START, true ) ); } else { s_currentXmlAddress = ""; i_counter = 0 ; dispatchEvent( new Event( MULTI_LOAD_COMPLETE, true ) ); } } private function progressListener( evt:ProgressEvent ):void { i_xmlBytesLoaded = evt.target.bytesLoaded; dispatchEvent( new Event( XML_LOAD_PROGRESS, true) ); } private function completedListener( evt:Event ):void { xml_data = new XML( evt.target.data ); dispatchEvent( new Event( XML_LOAD_COMPLETE, true ) ); i_counter++; load(); } //SINGLETON: private static var _instance:MultiXmlLoader; public static function getInstance():MultiXmlLoader { if (!_instance) _instance = new MultiXmlLoader(); return _instance; } } }