commit d773b3ba5f49080c992ac8dd2b5b99a107b61697 Author: shmyga Date: Fri Aug 9 08:56:46 2013 +0200 init diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..d8082da --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +*.iml +*.ipr +*.iws +.idea/ +*target* diff --git a/haxelib.json b/haxelib.json new file mode 100755 index 0000000..4e38701 --- /dev/null +++ b/haxelib.json @@ -0,0 +1,11 @@ +{ + "name": "haxework", + "url" : "git@bitbucket.org/shmyga/haxework.git", + "license": "", + "tags": [], + "description": "", + "version": "0.0.0", + "releasenote": "Updated from git.", + "contributors": [], + "dependencies": {} +} \ No newline at end of file diff --git a/project.xml b/project.xml new file mode 100755 index 0000000..e94f76d --- /dev/null +++ b/project.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/main/haxe/com/abit/haxework/Test.hx b/src/main/haxe/com/abit/haxework/Test.hx new file mode 100755 index 0000000..7ea3abb --- /dev/null +++ b/src/main/haxe/com/abit/haxework/Test.hx @@ -0,0 +1,21 @@ +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); + }); + } +} diff --git a/src/main/haxe/com/abit/haxework/net/BaseLoader.hx b/src/main/haxe/com/abit/haxework/net/BaseLoader.hx new file mode 100755 index 0000000..67fff73 --- /dev/null +++ b/src/main/haxe/com/abit/haxework/net/BaseLoader.hx @@ -0,0 +1,73 @@ +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 implements ILoader { + + private var busy:Bool; + private var url:String; + private var loader:URLLoader; + private var callback:ICallback; + + public function new() { + busy = false; + } + + public function request(url:String, method:Method):ICallback { + if (busy) throw "Busy"; + busy = true; + this.url = url; + callback = new Callback(); + loader = buildLoader(); + loader.load(new URLRequest(url)); + return callback; + } + + public function GET(url:String):ICallback { + 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 = callback; + dispose(); + c.callSuccess(data); + } + + private function onError(e:Event):Void { + var c:ICallback = 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; + } +} + diff --git a/src/main/haxe/com/abit/haxework/net/ILoader.hx b/src/main/haxe/com/abit/haxework/net/ILoader.hx new file mode 100755 index 0000000..4668b3e --- /dev/null +++ b/src/main/haxe/com/abit/haxework/net/ILoader.hx @@ -0,0 +1,13 @@ +package com.abit.haxework.net; + +import com.abit.haxework.net.callback.ICallback; + +enum Method { + GET; + POST; +} + +interface ILoader { + public function request(url:String, method:Method):ICallback; + public function GET(url:String):ICallback; +} diff --git a/src/main/haxe/com/abit/haxework/net/JsonLoader.hx b/src/main/haxe/com/abit/haxework/net/JsonLoader.hx new file mode 100755 index 0000000..f35f796 --- /dev/null +++ b/src/main/haxe/com/abit/haxework/net/JsonLoader.hx @@ -0,0 +1,10 @@ +package com.abit.haxework.net; + +import haxe.Json; + +class JsonLoader extends BaseLoader { + + override private function extrudeResult(data:Dynamic):Dynamic { + return Json.parse(Std.string(data)); + } +} diff --git a/src/main/haxe/com/abit/haxework/net/TextLoader.hx b/src/main/haxe/com/abit/haxework/net/TextLoader.hx new file mode 100755 index 0000000..9db74aa --- /dev/null +++ b/src/main/haxe/com/abit/haxework/net/TextLoader.hx @@ -0,0 +1,8 @@ +package com.abit.haxework.net; + +class TextLoader extends BaseLoader { + + override private function extrudeResult(data:Dynamic):String { + return Std.string(data); + } +} diff --git a/src/main/haxe/com/abit/haxework/net/callback/Callback.hx b/src/main/haxe/com/abit/haxework/net/callback/Callback.hx new file mode 100755 index 0000000..0a5d0aa --- /dev/null +++ b/src/main/haxe/com/abit/haxework/net/callback/Callback.hx @@ -0,0 +1,35 @@ +package com.abit.haxework.net.callback; + +class Callback implements ICallback { + + private var _success:Null Void>; + private var _fail:Null Void>; + + public function new() {} + + public function success(f:T -> Void):ICallback { + _success = f; + return this; + } + + public function fail(f:Dynamic -> Void):ICallback { + _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); + } + } +} diff --git a/src/main/haxe/com/abit/haxework/net/callback/ICallback.hx b/src/main/haxe/com/abit/haxework/net/callback/ICallback.hx new file mode 100755 index 0000000..5a653ed --- /dev/null +++ b/src/main/haxe/com/abit/haxework/net/callback/ICallback.hx @@ -0,0 +1,9 @@ +package com.abit.haxework.net.callback; + +interface ICallback { + public function success(f:T -> Void):ICallback; + public function fail(f:Dynamic -> Void):ICallback; + public function callSuccess(data:T):Void; + public function callFail(error:Dynamic):Void; +} +