[samples] update loader sample

This commit is contained in:
2019-02-06 23:01:39 +03:00
parent bc2bb7d125
commit 9182210001
7 changed files with 53 additions and 40 deletions

View File

@@ -3,4 +3,6 @@
-lib haxework -lib haxework
-main LoaderExample.hx -main LoaderExample.hx
-swf-version 10.1 -swf-version 10.1
-swf-header 800:600:30:000000
-swf target/LoaderExample.swf -swf target/LoaderExample.swf
#-as3 target

3
samples/02-loader/run.sh Normal file
View File

@@ -0,0 +1,3 @@
#!/usr/bin/env bash
. /opt/sdk/haxe/3.4.7/activate
haxe build.hxml && flashplayerdebugger target/LoaderExample.swf

View File

@@ -1,43 +1,46 @@
package; package;
import haxework.net.manage.LoaderManager;
import haxework.net.manage.ILoaderManager;
import flash.display.Bitmap; import flash.display.Bitmap;
import flash.Lib; import flash.Lib;
import flash.display.BitmapData; import flash.display.BitmapData;
import haxework.net.ImageLoader; import haxework.net.ImageLoader;
import haxework.net.JsonLoader; import haxework.net.JsonLoader;
typedef ChannelItem = { typedef ChannelItem = {
var id:String; var id:String;
var maker:String; var maker:String;
var title:String; var title:String;
var message:String; var message:String;
} }
class LoaderExample { class LoaderExample {
public static function main() { @:provide private static var manager:ILoaderManager;
// Json
trace("Json Request");
new JsonLoader().GET("http://umix.tv/channel/data2/renova.json")
.then(function(channel:Array<ChannelItem>) {
trace("Json Ok: " + channel.length);
for (item in channel) {
trace(item.id + ": " + item.message);
}
})
.catchError(function(error) {
trace(error);
});
// Image public static function main() {
trace("Image Request"); manager = new LoaderManager(1);
new ImageLoader().GET("http://umix.tv/channel/block/renova/1")
.then(function(image:BitmapData) { // Json
trace("Image Ok: " + image.width + "x" + image.height); trace("Json Request");
Lib.current.addChild(new Bitmap(image)); new JsonLoader().GET("http://umix.tv/channel/data2/renova.json")
}) .then(function(channel:Array<ChannelItem>) {
.catchError(function(error) { trace('Json Ok: ${channel.length}');
trace(error); for (item in channel) {
}); trace('${item.id}: ${item.message}');
} }
})
.catchError(function(error) trace(error));
// Image
trace("Image Request");
new ImageLoader().GET("http://umix.tv/channel/block/renova/1")
.then(function(image:BitmapData) {
trace('Image Ok: ${image.width}x${image.height}}');
Lib.current.addChild(new Bitmap(image));
})
.catchError(function(error) trace(error));
}
} }

View File

@@ -30,15 +30,18 @@ class ProvideMacro {
case ComplexType.TPath(p): p.name; case ComplexType.TPath(p): p.name;
default: null; default: null;
} }
var isStatic = Lambda.exists(field.access, function(a: Access) return a == AStatic);
result.push({ result.push({
name: field.name, name: field.name,
access: [Access.APublic], access: isStatic ? [Access.APublic, Access.AStatic] : [Access.APublic],
pos: field.pos, pos: field.pos,
kind: FieldType.FProp('get', 'set', type) kind: FieldType.FProp('get', 'set', type)
}); });
var access = [Access.APrivate, Access.AInline];
if (isStatic) access.push(Access.AStatic);
result.push({ result.push({
name: 'get_${field.name}', name: 'get_${field.name}',
access: [Access.APrivate, Access.AInline], access: access,
pos: field.pos, pos: field.pos,
kind: FieldType.FFun({ kind: FieldType.FFun({
args: [], args: [],
@@ -49,7 +52,7 @@ class ProvideMacro {
}); });
result.push({ result.push({
name: 'set_${field.name}', name: 'set_${field.name}',
access: [Access.APrivate, Access.AInline], access: access,
pos: field.pos, pos: field.pos,
kind: FieldType.FFun({ kind: FieldType.FFun({
args: [{name: 'value', type: type}], args: [{name: 'value', type: type}],

View File

@@ -2,13 +2,11 @@ package haxework.net;
import promhx.Deferred; import promhx.Deferred;
import promhx.Promise; import promhx.Promise;
//import flash.utils.JSON;
import haxe.Json; import haxe.Json;
import haxe.Timer; import haxe.Timer;
import flash.net.URLRequestMethod; import flash.net.URLRequestMethod;
import flash.events.ProgressEvent; import flash.events.ProgressEvent;
import haxework.net.manage.ILoaderManager; import haxework.net.manage.ILoaderManager;
import haxework.provider.Provider;
import flash.utils.ByteArray; import flash.utils.ByteArray;
import flash.events.Event; import flash.events.Event;
@@ -32,7 +30,9 @@ class BaseLoader<T> extends Deferred<T> implements ILoader<T> {
private var data:Null<Dynamic>; private var data:Null<Dynamic>;
private var timer:Timer; private var timer:Timer;
public function new(?timeout = 0) { @:provide private var manager:ILoaderManager;
public function new(timeout = 0) {
super(); super();
this.timeout = timeout; this.timeout = timeout;
busy = false; busy = false;
@@ -50,7 +50,7 @@ class BaseLoader<T> extends Deferred<T> implements ILoader<T> {
var url:String = this.url; var url:String = this.url;
//L.d(TAG, "Request: " + prepareUrl(url)); //L.d(TAG, "Request: " + prepareUrl(url));
//internalRequest(prepareUrl(url)); //internalRequest(prepareUrl(url));
Provider.get(ILoaderManager).add(this); manager.add(this);
} }
return this.promise(); return this.promise();
} }
@@ -79,6 +79,7 @@ class BaseLoader<T> extends Deferred<T> implements ILoader<T> {
return this.promise(); return this.promise();
} }
#if (openfl && lime)
private function fromAssets(url:String):Promise<T> { private function fromAssets(url:String):Promise<T> {
try { try {
var path:String = url.substring(9); var path:String = url.substring(9);
@@ -105,6 +106,7 @@ class BaseLoader<T> extends Deferred<T> implements ILoader<T> {
return this.promise(); return this.promise();
} }
} }
#end
public function GET(url:String, data:Dynamic = null):Promise<T> { public function GET(url:String, data:Dynamic = null):Promise<T> {
#if (openfl && lime) #if (openfl && lime)
@@ -178,7 +180,7 @@ class BaseLoader<T> extends Deferred<T> implements ILoader<T> {
data = null; data = null;
busy = false; busy = false;
completed = Math.NaN; completed = Math.NaN;
Provider.get(ILoaderManager).release(this); manager.release(this);
} }
public function cancel():Void { public function cancel():Void {

View File

@@ -8,10 +8,10 @@ class LoaderManager implements ILoaderManager {
public var queue(default, null):Array<ILoader<Dynamic>>; public var queue(default, null):Array<ILoader<Dynamic>>;
public var limit(default, default):Int; public var limit(default, default):Int;
public function new() { public function new(limit:Int = 10) {
queue = new Array<ILoader<Dynamic>>(); queue = new Array<ILoader<Dynamic>>();
actives = new Array<ILoader<Dynamic>>(); actives = new Array<ILoader<Dynamic>>();
limit = 10; this.limit = limit;
} }
public function add(loader:ILoader<Dynamic>):Void { public function add(loader:ILoader<Dynamic>):Void {