added loader manager
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user