From ae9fad2884cc587481931c6cec619ccbf17e6fd9 Mon Sep 17 00:00:00 2001 From: shmyga Date: Wed, 25 Dec 2013 17:41:57 +0400 Subject: [PATCH] added loader manager --- haxework/gui/TextView.hx | 2 +- haxework/net/BaseLoader.hx | 10 +++++++++- haxework/net/ILoader.hx | 2 ++ haxework/net/manage/ILoaderManager.hx | 4 ++++ haxework/net/manage/LoaderManager.hx | 26 ++++++++++++++++++-------- 5 files changed, 34 insertions(+), 10 deletions(-) diff --git a/haxework/gui/TextView.hx b/haxework/gui/TextView.hx index d784b7e..05d3354 100755 --- a/haxework/gui/TextView.hx +++ b/haxework/gui/TextView.hx @@ -71,7 +71,7 @@ class TextView extends SpriteView implements ITextView { } 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; diff --git a/haxework/net/BaseLoader.hx b/haxework/net/BaseLoader.hx index 0892359..1d1ab99 100755 --- a/haxework/net/BaseLoader.hx +++ b/haxework/net/BaseLoader.hx @@ -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 implements ILoader { callback = new Callback(); 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 implements ILoader { data = null; callback = null; busy = false; + Provider.get(ILoaderManager).release(this); } public function cancel():Void { dispose(); } + + public function run():Void { + internalRequest(prepareUrl(url)); + } } diff --git a/haxework/net/ILoader.hx b/haxework/net/ILoader.hx index fc7b81c..1954e18 100755 --- a/haxework/net/ILoader.hx +++ b/haxework/net/ILoader.hx @@ -15,4 +15,6 @@ interface ILoader { public function GET(url:String, data:Dynamic = null):ICallback; public function POST(url:String, data:Dynamic = null):ICallback; public function cancel():Void; + + public function run():Void; } diff --git a/haxework/net/manage/ILoaderManager.hx b/haxework/net/manage/ILoaderManager.hx index 2f2e88d..a06f679 100755 --- a/haxework/net/manage/ILoaderManager.hx +++ b/haxework/net/manage/ILoaderManager.hx @@ -1,6 +1,10 @@ package haxework.net.manage; interface ILoaderManager { + public var actives(default, null):Array>; + public var queue(default, null):Array>; + public var limit(default, default):Int; + public function add(loader:ILoader):Void; public function release(loader:ILoader):Void; } \ No newline at end of file diff --git a/haxework/net/manage/LoaderManager.hx b/haxework/net/manage/LoaderManager.hx index 388fa4a..f65a247 100755 --- a/haxework/net/manage/LoaderManager.hx +++ b/haxework/net/manage/LoaderManager.hx @@ -1,26 +1,36 @@ package haxework.net.manage; -import haxe.ds.ObjectMap; - class LoaderManager implements ILoaderManager { - private var queue:Array>; - private var actives:Array>; - private var limit:Int; - private var timeout:Map; + private static inline var TAG:String = "LoaderManager"; + + public var actives(default, null):Array>; + public var queue(default, null):Array>; + public var limit(default, default):Int; public function new() { queue = new Array>(); actives = new Array>(); limit = 10; - timeout = new ObjectMap(); } public function add(loader:ILoader):Void { + if (actives.length >= limit) { + queue.push(loader); + } else { + run(loader); + } + } + private function run(loader:ILoader):Void { + actives.push(loader); + loader.run(); } public function release(loader:ILoader):Void { - + actives.remove(loader); + if (queue.length > 0 && actives.length == 0) { + run(queue.shift()); + } } } \ No newline at end of file