diff --git a/haxework/net/BaseLoader.hx b/haxework/net/BaseLoader.hx index b114360..f642557 100755 --- a/haxework/net/BaseLoader.hx +++ b/haxework/net/BaseLoader.hx @@ -1,5 +1,6 @@ package haxework.net; +import flash.events.ProgressEvent; import haxework.net.manage.ILoaderManager; import haxework.provider.Provider; import flash.utils.ByteArray; @@ -12,11 +13,14 @@ class BaseLoader implements ILoader { private static inline var TAG:String = "Loader"; + //ToDo: move to LoaderManager public static var urlProcessors(default, null):ArrayString> = new ArrayString>(); public static function prepareUrl(url:String):String { for (p in urlProcessors) url = p(url); return url; } public var busy(default, null):Bool; + public var completed(default, null):Float; + private var url:String; private var method:Method; private var data:Null; @@ -24,6 +28,7 @@ class BaseLoader implements ILoader { public function new() { busy = false; + completed = Math.NaN; } public function request(url:String, method:Method, data:Dynamic = null):ICallback { @@ -66,6 +71,10 @@ class BaseLoader implements ILoader { private function onInit(e:Event):Void {} + private function onProgress(e:ProgressEvent):Void { + completed = e.bytesLoaded / e.bytesTotal; + } + private function onComplete(e:Event):Void { var data:T = extrudeResult(e); var c:ICallback = callback; @@ -89,6 +98,7 @@ class BaseLoader implements ILoader { data = null; callback = null; busy = false; + completed = Math.NaN; Provider.get(ILoaderManager).release(this); } diff --git a/haxework/net/BaseMediaLoader.hx b/haxework/net/BaseMediaLoader.hx index d00b5d7..efd6bcc 100755 --- a/haxework/net/BaseMediaLoader.hx +++ b/haxework/net/BaseMediaLoader.hx @@ -1,5 +1,6 @@ package haxework.net; +import flash.events.ProgressEvent; import flash.system.Security; import flash.system.SecurityDomain; import flash.system.ApplicationDomain; @@ -46,6 +47,7 @@ class BaseMediaLoader extends BaseLoader { loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onError); loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onError); + loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress); return loader; } @@ -56,6 +58,7 @@ class BaseMediaLoader extends BaseLoader { loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onComplete); loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, onError); loader.contentLoaderInfo.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onError); + loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress); loader = null; } } diff --git a/haxework/net/BaseURLLoader.hx b/haxework/net/BaseURLLoader.hx index 603baee..35c8c93 100755 --- a/haxework/net/BaseURLLoader.hx +++ b/haxework/net/BaseURLLoader.hx @@ -1,5 +1,6 @@ package haxework.net; +import flash.events.ProgressEvent; import haxework.net.ILoader.Method; import flash.net.URLLoaderDataFormat; import flash.events.SecurityErrorEvent; @@ -30,6 +31,7 @@ class BaseURLLoader extends BaseLoader { loader.addEventListener(Event.COMPLETE, onComplete); loader.addEventListener(IOErrorEvent.IO_ERROR, onError); loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onError); + loader.addEventListener(ProgressEvent.PROGRESS, onProgress); return loader; } @@ -39,6 +41,7 @@ class BaseURLLoader extends BaseLoader { loader.removeEventListener(Event.COMPLETE, onComplete); loader.removeEventListener(IOErrorEvent.IO_ERROR, onError); loader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onError); + loader.removeEventListener(ProgressEvent.PROGRESS, onProgress); loader = null; } } diff --git a/haxework/net/ILoader.hx b/haxework/net/ILoader.hx index 1954e18..91fab36 100755 --- a/haxework/net/ILoader.hx +++ b/haxework/net/ILoader.hx @@ -10,6 +10,8 @@ enum Method { interface ILoader { public var busy(default, null):Bool; + public var completed(default, null):Float; + public function request(url:String, method:Method, data:Dynamic = null):ICallback; public function fromBytes(data:ByteArray):ICallback; public function GET(url:String, data:Dynamic = null):ICallback; diff --git a/haxework/storage/IStorage.hx b/haxework/storage/IStorage.hx new file mode 100755 index 0000000..c102404 --- /dev/null +++ b/haxework/storage/IStorage.hx @@ -0,0 +1,9 @@ +package haxework.storage; + +import flash.utils.ByteArray; + +interface IStorage { + public function exists(key:String):Bool; + public function write(key:String, value:ByteArray):Void; + public function read(ley:String):Null; +} \ No newline at end of file diff --git a/haxework/storage/SharedObjectStorage.hx b/haxework/storage/SharedObjectStorage.hx new file mode 100755 index 0000000..1bcc034 --- /dev/null +++ b/haxework/storage/SharedObjectStorage.hx @@ -0,0 +1,23 @@ +package haxework.storage; + +import flash.net.SharedObject; +import flash.utils.ByteArray; + +class SharedObjectStorage implements IStorage { + + public function exists(key:String):Bool { + var so:SharedObject = SharedObject.getLocal(key); + return so.size > 0; + } + + public function write(key:String, value:ByteArray):Void { + var so:SharedObject = SharedObject.getLocal(key); + so.setProperty("value", value); + so.flush(); + } + + public function read(key:String):Null { + var so:SharedObject = SharedObject.getLocal(key); + return so.data.value; + } +} \ No newline at end of file