BatchLoader pro textové soubory

Poměrně často se setkávám s nutností stahování většího množství souborů najednou, jehož řešením je postupné načítání souborů jeden po druhém. Bylo by tedy určitě dobré mít nějakou třídu, která se o načtení souborů postará například v této podobě:

//instance objektu
var bLoader:BatchLoader = new BatchLoader(pole_souboru);
//načtení souborů z předaného pole
bLoader.load();
//doplnění listenerů
bLoader.addEventListener(BatchEvent.ALL_COMPLETE,loadCompl);
bLoader.addEventListener(BatchEvent.IO_ERROR,err);
function loadCompl(evt:Event):void{
  var pole_nactenych:Array = bLoader.getLoadedArray();
}

Jednoduchou třídu, která toto splňuje nalezneme v detailu článku.

BatchLoader.as

package cls
{
import cls.myEvents.BatchEvent;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IOErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
 
[Event(name="allComplete", type="cls.myEvents.BatchEvent")]
[Event(name="subComplete", type="cls.myEvents.BatchEvent")]
[Event(name="ioError", type="cls.myEvents.BatchEvent")]
 
public class BatchLoader extends EventDispatcher{
 
private var evtDispatch:EventDispatcher;
//loader
private var myLoader:URLLoader;
//pole zdrojových souborů k načtení
private var sourceArr:Array;
//pole načtených dat
private var finalArr:Array;
//nastavení, který prvek bude brán z pole první
private var firstOut:Boolean;
 
public function BatchLoader(src:Array,fo:Boolean=true){
sourceArr = src;
firstOut = fo;
myLoader = new URLLoader();
}
 
public function load():void{
finalArr = new Array();
myLoader.addEventListener(Event.COMPLETE,loaded);
myLoader.addEventListener(IOErrorEvent.IO_ERROR,err);
loadNextItem();
}
 
private function loaded(evt:Event):void{
finalArr.push(myLoader.data);
if(sourceArr.length>0){
dispatchEvent(new BatchEvent(BatchEvent.SUB_COMPLETE));
loadNextItem();
}else{
dispatchEvent(new BatchEvent(BatchEvent.ALL_COMPLETE));
}
}
 
private function err(evt:Event):void{
sendMsg("Chyba načítání");
dispatchEvent(new BatchEvent(BatchEvent.IO_ERROR));
if(sourceArr.length>0){
loadNextItem();
}
}
 
private function loadNextItem():void{
if(sourceArr.length>0){
var src:String="";
if(firstOut){
src = sourceArr.shift();
}else{
src = sourceArr.pop();
}
var req:URLRequest = new URLRequest(src);
myLoader.load(req);
}else{
sendMsg("Pole neobsahuje žádné prvky");
}
}
 
private function sendMsg(str:String):void{
trace(str);
}
 
public function getLoadedArray():Array{
return finalArr;
}
}
}

BatchEvent.as

package cls.myEvents
{
import flash.events.Event;
 
public class BatchEvent extends Event {
 
public static const ALL_COMPLETE:String = "allComplete";
public static const SUB_COMPLETE:String = "subComplete";
public static const IO_ERROR:String = "ioError";
 
public function BatchEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false){
super(type, bubbles, cancelable);
}
 
override public function clone():Event {
return new BatchEvent(type);
}
}
}

2 Responses to “BatchLoader pro textové soubory”

  1. lukas ;) Says:

    Sikovna (podobna) vec je tohle:
    http://code.google.com/p/vanrijkom-flashlibs/

  2. admin Says:

    díky, dobrej tip ;-)

Leave a Reply

Captcha
Enter the letters you see above. (Case sensitive)