This commit is contained in:
2013-08-09 09:08:10 +02:00
parent d773b3ba5f
commit 36b8cf0987
8 changed files with 7 additions and 17 deletions

View File

@@ -1,21 +0,0 @@
package com.abit.haxework;
import com.abit.haxework.net.JsonLoader;
import flash.display.Sprite;
class Test extends Sprite {
public function new() {
super();
trace("Ok");
new JsonLoader()
.GET("http://umix.tv/channel/data/maxim.json")
.success(function(data:String):Void {
trace("OK: " + data);
})
.fail(function(error:Dynamic):Void {
trace("FAIL: " + error);
});
}
}

View File

@@ -1,73 +0,0 @@
package com.abit.haxework.net;
import flash.events.SecurityErrorEvent;
import com.abit.haxework.net.callback.Callback;
import com.abit.haxework.net.callback.ICallback;
import flash.events.IOErrorEvent;
import flash.net.URLRequest;
import flash.events.Event;
import flash.net.URLLoader;
import com.abit.haxework.net.ILoader.Method;
class BaseLoader<T> implements ILoader<T> {
private var busy:Bool;
private var url:String;
private var loader:URLLoader;
private var callback:ICallback<T>;
public function new() {
busy = false;
}
public function request(url:String, method:Method):ICallback<T> {
if (busy) throw "Busy";
busy = true;
this.url = url;
callback = new Callback<T>();
loader = buildLoader();
loader.load(new URLRequest(url));
return callback;
}
public function GET(url:String):ICallback<T> {
return request(url, Method.GET);
}
private function buildLoader():URLLoader {
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, onComplete);
loader.addEventListener(IOErrorEvent.IO_ERROR, onError);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onError);
return loader;
}
private function onComplete(e:Event):Void {
var data:T = extrudeResult(loader.data);
var c:ICallback<T> = callback;
dispose();
c.callSuccess(data);
}
private function onError(e:Event):Void {
var c:ICallback<T> = callback;
dispose();
c.callFail(e);
}
private function dispose():Void {
loader.removeEventListener(Event.COMPLETE, onComplete);
loader.removeEventListener(IOErrorEvent.IO_ERROR, onError);
loader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, onError);
loader = null;
url = null;
callback = null;
busy = false;
}
private function extrudeResult(data:Dynamic):T {
throw "Abstract";
return null;
}
}

View File

@@ -1,13 +0,0 @@
package com.abit.haxework.net;
import com.abit.haxework.net.callback.ICallback;
enum Method {
GET;
POST;
}
interface ILoader<T> {
public function request(url:String, method:Method):ICallback<T>;
public function GET(url:String):ICallback<T>;
}

View File

@@ -1,10 +0,0 @@
package com.abit.haxework.net;
import haxe.Json;
class JsonLoader extends BaseLoader<Dynamic> {
override private function extrudeResult(data:Dynamic):Dynamic {
return Json.parse(Std.string(data));
}
}

View File

@@ -1,8 +0,0 @@
package com.abit.haxework.net;
class TextLoader extends BaseLoader<String> {
override private function extrudeResult(data:Dynamic):String {
return Std.string(data);
}
}

View File

@@ -1,35 +0,0 @@
package com.abit.haxework.net.callback;
class Callback<T> implements ICallback<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 {
_success(data);
} catch (error:Dynamic) {
callFail(error);
}
}
public function callFail(error:Dynamic):Void {
try {
_fail(error);
} catch (error:Dynamic) {
trace(error);
}
}
}

View File

@@ -1,9 +0,0 @@
package com.abit.haxework.net.callback;
interface ICallback<T> {
public function success(f:T -> Void):ICallback<T>;
public function fail(f:Dynamic -> Void):ICallback<T>;
public function callSuccess(data:T):Void;
public function callFail(error:Dynamic):Void;
}