Files
haxework/haxework/net/callback/Callback.hx
2014-04-15 14:32:10 +04:00

68 lines
1.3 KiB
Haxe
Executable File

package haxework.net.callback;
import haxe.Timer;
class Callback<T> implements ICallback<T> {
public static function build<T>():ICallback<T> {
return new Callback<T>();
}
private var _success:Null<T -> Void>;
private var _fail:Null<Dynamic -> Void>;
public function new() {}
public function success(f:T -> Void):ICallback<T> {
_success = f;
return this;
}
public function fail(f:Dynamic -> Void):ICallback<T> {
_fail = f;
return this;
}
public function callSuccess(data:T):Void {
try {
if (_success != null) _success(data);
} catch (error:Dynamic) {
callFail(error);
}
dispose();
}
public function callSuccessAsync(data:T):Void {
Timer.delay(function():Void {
callSuccess(data);
}, 1);
}
public function callFail(error:Dynamic):Void {
try {
if (_fail != null) _fail(error);
} catch (error:Dynamic) {
L.d("Callback", "", error);
}
dispose();
}
public function callFailAsync(error:Dynamic):Void {
Timer.delay(function():Void {
callFail(error);
}, 1);
}
public function glue(callback:ICallback<T>):ICallback<T> {
this._success = callback.callSuccess;
this._fail = callback.callFail;
//callback.dispose(); //ToDo:
return this;
}
public function dispose():Void {
_success = null;
_fail = null;
}
}