Simplify use of BackgroundWorker in Assets, add optional onError condition in worker

This commit is contained in:
Joshua Granick
2015-07-06 10:21:47 -07:00
parent 0882e27537
commit 087203455c
2 changed files with 43 additions and 7 deletions

View File

@@ -16,9 +16,13 @@ import neko.vm.Thread;
class BackgroundWorker { class BackgroundWorker {
private static var MESSAGE_COMPLETE = "__COMPLETE__";
private static var MESSAGE_ERROR = "__ERROR__";
public var canceled (default, null):Bool; public var canceled (default, null):Bool;
public var doWork = new Event<Dynamic->Void> (); public var doWork = new Event<Dynamic->Void> ();
public var onComplete = new Event<Dynamic->Void> (); public var onComplete = new Event<Dynamic->Void> ();
public var onError = new Event<Dynamic->Void> ();
public var onProgress = new Event<Dynamic->Void> (); public var onProgress = new Event<Dynamic->Void> ();
private var __runMessage:Dynamic; private var __runMessage:Dynamic;
@@ -74,7 +78,7 @@ class BackgroundWorker {
#if (cpp || neko) #if (cpp || neko)
__messageQueue.add ("__DONE__"); __messageQueue.add (MESSAGE_COMPLETE);
__messageQueue.add (message); __messageQueue.add (message);
#else #else
@@ -91,6 +95,27 @@ class BackgroundWorker {
} }
public function sendError (message:Dynamic):Void {
#if (cpp || neko)
__messageQueue.add (MESSAGE_ERROR);
__messageQueue.add (message);
#else
if (!canceled) {
canceled = true;
onError.dispatch (message);
}
#end
}
public function sendProgress (message:Dynamic):Void { public function sendProgress (message:Dynamic):Void {
#if (cpp || neko) #if (cpp || neko)
@@ -116,7 +141,7 @@ class BackgroundWorker {
#if (cpp || neko) #if (cpp || neko)
__messageQueue.add ("__DONE__"); __messageQueue.add (MESSAGE_COMPLETE);
#else #else
@@ -140,15 +165,18 @@ class BackgroundWorker {
if (message != null) { if (message != null) {
if (message != "__DONE__") { if (message == MESSAGE_ERROR) {
Application.current.onUpdate.remove (__update);
if (!canceled) { if (!canceled) {
onProgress.dispatch (message); canceled = true;
onError.dispatch (__messageQueue.pop (false));
} }
} else { } else if (message == MESSAGE_COMPLETE) {
Application.current.onUpdate.remove (__update); Application.current.onUpdate.remove (__update);
@@ -159,6 +187,14 @@ class BackgroundWorker {
} }
} else {
if (!canceled) {
onProgress.dispatch (message);
}
} }
} }

View File

@@ -556,7 +556,7 @@ class DefaultAssetLibrary extends AssetLibrary {
}); });
worker.onComplete.add (function (bytes) handler (bytes)); worker.onComplete.add (handler);
worker.run (); worker.run ();
#end #end
@@ -613,7 +613,7 @@ class DefaultAssetLibrary extends AssetLibrary {
}); });
worker.onComplete.add (function (image) handler (image)); worker.onComplete.add (handler);
worker.run (); worker.run ();
#end #end