added loader manager

This commit is contained in:
2013-12-25 17:41:57 +04:00
parent d5fa440859
commit ae9fad2884
5 changed files with 34 additions and 10 deletions

View File

@@ -71,7 +71,7 @@ class TextView extends SpriteView implements ITextView<Sprite, TextField> {
}
override public function update():Void {
textField.setTextFormat(textFormat);
textField.defaultTextFormat = textFormat;
if (text != null) textField.text = text;
if (contentSize && !Std.is(skin, ISize)) {
width = textField.width;

View File

@@ -1,5 +1,7 @@
package haxework.net;
import haxework.net.manage.ILoaderManager;
import haxework.provider.Provider;
import flash.utils.ByteArray;
import haxework.net.callback.Callback;
import haxework.net.callback.ICallback;
@@ -31,7 +33,8 @@ class BaseLoader<T> implements ILoader<T> {
callback = new Callback<T>();
var url:String = this.url;
//L.d(TAG, "Request: " + prepareUrl(url));
internalRequest(prepareUrl(url));
//internalRequest(prepareUrl(url));
Provider.get(ILoaderManager).add(this);
return callback;
}
@@ -84,10 +87,15 @@ class BaseLoader<T> implements ILoader<T> {
data = null;
callback = null;
busy = false;
Provider.get(ILoaderManager).release(this);
}
public function cancel():Void {
dispose();
}
public function run():Void {
internalRequest(prepareUrl(url));
}
}

View File

@@ -15,4 +15,6 @@ interface ILoader<T> {
public function GET(url:String, data:Dynamic = null):ICallback<T>;
public function POST(url:String, data:Dynamic = null):ICallback<T>;
public function cancel():Void;
public function run():Void;
}

View File

@@ -1,6 +1,10 @@
package haxework.net.manage;
interface ILoaderManager {
public var actives(default, null):Array<ILoader<Dynamic>>;
public var queue(default, null):Array<ILoader<Dynamic>>;
public var limit(default, default):Int;
public function add(loader:ILoader<Dynamic>):Void;
public function release(loader:ILoader<Dynamic>):Void;
}

View File

@@ -1,26 +1,36 @@
package haxework.net.manage;
import haxe.ds.ObjectMap;
class LoaderManager implements ILoaderManager {
private var queue:Array<ILoader<Dynamic>>;
private var actives:Array<ILoader<Dynamic>>;
private var limit:Int;
private var timeout:Map<Dynamic, Int>;
private static inline var TAG:String = "LoaderManager";
public var actives(default, null):Array<ILoader<Dynamic>>;
public var queue(default, null):Array<ILoader<Dynamic>>;
public var limit(default, default):Int;
public function new() {
queue = new Array<ILoader<Dynamic>>();
actives = new Array<ILoader<Dynamic>>();
limit = 10;
timeout = new ObjectMap<Dynamic, Int>();
}
public function add(loader:ILoader<Dynamic>):Void {
if (actives.length >= limit) {
queue.push(loader);
} else {
run(loader);
}
}
private function run(loader:ILoader<Dynamic>):Void {
actives.push(loader);
loader.run();
}
public function release(loader:ILoader<Dynamic>):Void {
actives.remove(loader);
if (queue.length > 0 && actives.length == 0) {
run(queue.shift());
}
}
}