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 {
|
override public function update():Void {
|
||||||
textField.setTextFormat(textFormat);
|
textField.defaultTextFormat = textFormat;
|
||||||
if (text != null) textField.text = text;
|
if (text != null) textField.text = text;
|
||||||
if (contentSize && !Std.is(skin, ISize)) {
|
if (contentSize && !Std.is(skin, ISize)) {
|
||||||
width = textField.width;
|
width = textField.width;
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package haxework.net;
|
package haxework.net;
|
||||||
|
|
||||||
|
import haxework.net.manage.ILoaderManager;
|
||||||
|
import haxework.provider.Provider;
|
||||||
import flash.utils.ByteArray;
|
import flash.utils.ByteArray;
|
||||||
import haxework.net.callback.Callback;
|
import haxework.net.callback.Callback;
|
||||||
import haxework.net.callback.ICallback;
|
import haxework.net.callback.ICallback;
|
||||||
@@ -31,7 +33,8 @@ class BaseLoader<T> implements ILoader<T> {
|
|||||||
callback = new Callback<T>();
|
callback = new Callback<T>();
|
||||||
var url:String = this.url;
|
var url:String = this.url;
|
||||||
//L.d(TAG, "Request: " + prepareUrl(url));
|
//L.d(TAG, "Request: " + prepareUrl(url));
|
||||||
internalRequest(prepareUrl(url));
|
//internalRequest(prepareUrl(url));
|
||||||
|
Provider.get(ILoaderManager).add(this);
|
||||||
return callback;
|
return callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,10 +87,15 @@ class BaseLoader<T> implements ILoader<T> {
|
|||||||
data = null;
|
data = null;
|
||||||
callback = null;
|
callback = null;
|
||||||
busy = false;
|
busy = false;
|
||||||
|
Provider.get(ILoaderManager).release(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function cancel():Void {
|
public function cancel():Void {
|
||||||
dispose();
|
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 GET(url:String, data:Dynamic = null):ICallback<T>;
|
||||||
public function POST(url:String, data:Dynamic = null):ICallback<T>;
|
public function POST(url:String, data:Dynamic = null):ICallback<T>;
|
||||||
public function cancel():Void;
|
public function cancel():Void;
|
||||||
|
|
||||||
|
public function run():Void;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
package haxework.net.manage;
|
package haxework.net.manage;
|
||||||
|
|
||||||
interface ILoaderManager {
|
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 add(loader:ILoader<Dynamic>):Void;
|
||||||
public function release(loader:ILoader<Dynamic>):Void;
|
public function release(loader:ILoader<Dynamic>):Void;
|
||||||
}
|
}
|
||||||
@@ -1,26 +1,36 @@
|
|||||||
package haxework.net.manage;
|
package haxework.net.manage;
|
||||||
|
|
||||||
import haxe.ds.ObjectMap;
|
|
||||||
|
|
||||||
class LoaderManager implements ILoaderManager {
|
class LoaderManager implements ILoaderManager {
|
||||||
|
|
||||||
private var queue:Array<ILoader<Dynamic>>;
|
private static inline var TAG:String = "LoaderManager";
|
||||||
private var actives:Array<ILoader<Dynamic>>;
|
|
||||||
private var limit:Int;
|
public var actives(default, null):Array<ILoader<Dynamic>>;
|
||||||
private var timeout:Map<Dynamic, Int>;
|
public var queue(default, null):Array<ILoader<Dynamic>>;
|
||||||
|
public var limit(default, default):Int;
|
||||||
|
|
||||||
public function new() {
|
public function new() {
|
||||||
queue = new Array<ILoader<Dynamic>>();
|
queue = new Array<ILoader<Dynamic>>();
|
||||||
actives = new Array<ILoader<Dynamic>>();
|
actives = new Array<ILoader<Dynamic>>();
|
||||||
limit = 10;
|
limit = 10;
|
||||||
timeout = new ObjectMap<Dynamic, Int>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function add(loader:ILoader<Dynamic>):Void {
|
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 {
|
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