From d8b41155063aea0cc8bfeecc9d641e6095b7c227 Mon Sep 17 00:00:00 2001 From: Hugh Sanderson Date: Tue, 4 Jun 2024 16:41:38 +0800 Subject: [PATCH] Remove CURL library from NME_LOCAL_TOOLKIT --- project/ToolkitBuild.xml | 6 +- project/src/common/ExternalInterface.cpp | 19 ++-- samples/13-URLLoader/Sample.hx | 108 +++++++++++--------- samples/13-URLLoader/Sample.nmml | 4 +- src/nme/display/Loader.hx | 17 ++-- src/nme/display/LoaderInfo.hx | 22 +++-- src/nme/net/HttpLoader.hx | 5 - src/nme/net/URLLoader.hx | 120 ++++++++++++++++------- src/nme/net/URLRequest.hx | 5 +- src/nme/net/URLVariables.hx | 45 +-------- 10 files changed, 187 insertions(+), 164 deletions(-) diff --git a/project/ToolkitBuild.xml b/project/ToolkitBuild.xml index b38ad63d2..7f806b0cb 100644 --- a/project/ToolkitBuild.xml +++ b/project/ToolkitBuild.xml @@ -92,7 +92,7 @@ - + @@ -168,11 +168,12 @@ + + - @@ -402,6 +403,7 @@ +
diff --git a/project/src/common/ExternalInterface.cpp b/project/src/common/ExternalInterface.cpp index fc718d6d7..f416b6808 100644 --- a/project/src/common/ExternalInterface.cpp +++ b/project/src/common/ExternalInterface.cpp @@ -10,7 +10,6 @@ #endif #if defined(EMSCRIPTEN) || defined(HX_WINRT) -#define NME_NO_CURL #define NME_NO_CAMERA #endif #if defined(HXCPP_JS_PRIME) || defined(HX_WINRT) @@ -5491,7 +5490,7 @@ DEFINE_PRIME3v(nme_tilesheet_get_rect); // --- URL ---------------------------------------------------------- value nme_curl_initialize(value inCACertFilePath) { - #ifndef NME_NO_CURL + #ifdef NME_CURL URLLoader::initialize(val_string(inCACertFilePath)); #endif return alloc_null(); @@ -5501,7 +5500,7 @@ DEFINE_PRIM(nme_curl_initialize,1); value nme_curl_create(value inURLRequest) { - #ifndef NME_NO_CURL + #ifdef NME_CURL URLRequest request; FromValue(inURLRequest,request); URLLoader *loader = URLLoader::create(request); @@ -5514,7 +5513,7 @@ DEFINE_PRIM(nme_curl_create,1); value nme_curl_process_loaders() { - #ifndef NME_NO_CURL + #ifdef NME_CURL return alloc_bool(URLLoader::processAll()); #endif return alloc_bool(true); @@ -5524,7 +5523,7 @@ DEFINE_PRIM(nme_curl_process_loaders,0); value nme_curl_update_loader(value inLoader,value outHaxeObj) { - #ifndef NME_NO_CURL + #ifdef NME_CURL URLLoader *loader; if (AbstractToObject(inLoader,loader)) { @@ -5540,7 +5539,7 @@ DEFINE_PRIM(nme_curl_update_loader,2); value nme_curl_get_error_message(value inLoader) { - #ifndef NME_NO_CURL + #ifdef NME_CURL URLLoader *loader; if (AbstractToObject(inLoader,loader)) { @@ -5554,7 +5553,7 @@ DEFINE_PRIM(nme_curl_get_error_message,1); value nme_curl_get_code(value inLoader) { - #ifndef NME_NO_CURL + #ifdef NME_CURL URLLoader *loader; if (AbstractToObject(inLoader,loader)) { @@ -5568,7 +5567,7 @@ DEFINE_PRIM(nme_curl_get_code,1); value nme_curl_get_data(value inLoader) { - #ifndef NME_NO_CURL + #ifdef NME_CURL URLLoader *loader; if (AbstractToObject(inLoader,loader)) { @@ -5584,7 +5583,7 @@ DEFINE_PRIM(nme_curl_get_data,1); value nme_curl_get_cookies(value inLoader) { - #ifndef NME_NO_CURL + #ifdef NME_CURL URLLoader *loader; if (AbstractToObject(inLoader,loader)) { @@ -5603,7 +5602,7 @@ DEFINE_PRIM(nme_curl_get_cookies,1); value nme_curl_get_headers(value inLoader) { - #ifndef NME_NO_CURL + #ifdef NME_CURL URLLoader *loader; if (AbstractToObject(inLoader,loader)) { diff --git a/samples/13-URLLoader/Sample.hx b/samples/13-URLLoader/Sample.hx index 45518db98..6ee7b3e89 100644 --- a/samples/13-URLLoader/Sample.hx +++ b/samples/13-URLLoader/Sample.hx @@ -11,33 +11,36 @@ import nme.errors.SecurityError; import nme.errors.TypeError; import nme.net.URLVariables; import nme.net.URLRequestMethod; +import nme.display.*; -class Sample extends Sprite { +class Sample extends Sprite +{ private var postTextField:TextField; private var xmlTextField:TextField; - private var externalXML:Xml; + private var externalXML:Xml; private var loader:URLLoader; public function new() - { - super(); - flash.Lib.current.addChild(this); - - //var request:URLRequest = new URLRequest("http://www.w3schools.com/xml/cd_catalog.xml"); - var request:URLRequest = new URLRequest("https://twitter.com/"); - #if !flash - request.basicAuth("basic","basic"); - request.cookieString = "name=value"; + { + super(); + //nme.Lib.current.addChild(this); + + var request:URLRequest = new URLRequest("http://help.websiteos.com/websiteos/example_of_a_simple_html_page.htm"); + request.userAgent = "haxe test"; + //request.basicAuth("basic","basic"); + //request.cookieString = "name=value"; //request.verbose = true; - #end + loader = new URLLoader(); loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); loader.addEventListener(Event.COMPLETE, loaderCompleteHandler); loader.addEventListener(ProgressEvent.PROGRESS, onProgress); + trace('Request:$request'); try { loader.load(request); + trace('Loader:$loader'); } catch (error:SecurityError) { @@ -48,37 +51,51 @@ class Sample extends Sprite { postTextField.x = 10; postTextField.y = 10; postTextField.background = true; - postTextField.autoSize = TextFieldAutoSize.LEFT; + postTextField.border = true; + postTextField.width = 400; + postTextField.height = 240; + //postTextField.autoSize = TextFieldAutoSize.LEFT; + postTextField.text = "post ..."; addChild(postTextField); xmlTextField = new TextField(); xmlTextField.x = 10; - xmlTextField.y = 100; + xmlTextField.y = 260; xmlTextField.background = true; - xmlTextField.autoSize = TextFieldAutoSize.LEFT; + xmlTextField.border = true; + xmlTextField.width = 400; + xmlTextField.height = 240; + //xmlTextField.autoSize = TextFieldAutoSize.LEFT; + xmlTextField.text = "xml data..."; addChild(xmlTextField); //var t0 = haxe.Timer.stamp(); //addEventListener( Event.ENTER_FRAME, function(_) trace( haxe.Timer.stamp()-t0 ) ); - var image_loader = new flash.display.Loader(); - image_loader.contentLoaderInfo.addEventListener(flash.events.Event.COMPLETE, function(_) { - var bmp:flash.display.Bitmap = cast image_loader.content; - trace("Loaded image " + bmp.bitmapData.width + "x" + bmp.bitmapData.height); + var image_loader = new nme.display.Loader(); + image_loader.contentLoaderInfo.addEventListener(nme.events.Event.COMPLETE, function(_) { + var bmp:nme.display.Bitmap = cast image_loader.content; + trace("Loaded image " + bmp.bitmapData); }); - - var request:URLRequest = new URLRequest("http://upload.wikimedia.org/wikipedia/en/7/72/Example-serious.jpg"); + image_loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, e -> { + var tf = new TextField(); + tf.text = "Error:" + e; + image_loader.scaleX = image_loader.scaleY = 1.0; + image_loader.addChild(tf); + }); + + var request:URLRequest = new URLRequest("https://avatars.githubusercontent.com/u/2187351",{s:200,v:4} ); image_loader.load(request); image_loader.x = 10; - image_loader.y = 180; - image_loader.scaleX = 0.5; - image_loader.scaleY = 0.5; + image_loader.y = 510; + image_loader.scaleX = 0.25; + image_loader.scaleY = 0.25; addChild(image_loader); - var post = new URLRequest("http://www.snee.com/xml/crud/posttest.cgi"); + var post = new URLRequest("https://httpbin.org/anything"); var vars = new URLVariables(); vars.fname = "Milla"; vars.lname = "Jovovich"; @@ -87,11 +104,13 @@ class Sample extends Sprite { post.data = vars; //post.verbose = true; var postLoad = new URLLoader(); + postLoad.addEventListener(IOErrorEvent.IO_ERROR, e -> postTextField.htmlText = "Error:" + e ); postLoad.addEventListener(Event.COMPLETE, function(_) { postTextField.htmlText = postLoad.data.toString(); } ); - try { + try + { postLoad.load(post); } catch (error:SecurityError) @@ -101,28 +120,29 @@ class Sample extends Sprite { } - function onProgress(event:ProgressEvent) - { - trace("Loaded " + event.bytesLoaded + "/" + event.bytesTotal ); - } - - private function loaderCompleteHandler(event:Event):Void { + function onProgress(event:ProgressEvent) + { + trace("Loaded " + event.bytesLoaded + "/" + event.bytesTotal ); + } - try { - xmlTextField.text = loader.data; - } catch (e:TypeError) { - trace("Could not load the XML file."); - } + private function loaderCompleteHandler(event:Event):Void + { + trace("loaderCompleteHandler!"); + try + { + xmlTextField.text = loader.data; + } + catch (e:TypeError) + { + trace("Could not load the XML file."); + } } - private function errorHandler(e:IOErrorEvent):Void { - xmlTextField.text = "Error:" + e.text; + private function errorHandler(e:IOErrorEvent):Void + { + trace("error " + e); + xmlTextField.text = "Error:" + e.text; } - - public static function main() - { - new Sample(); - } } diff --git a/samples/13-URLLoader/Sample.nmml b/samples/13-URLLoader/Sample.nmml index 8e2852690..266e61439 100644 --- a/samples/13-URLLoader/Sample.nmml +++ b/samples/13-URLLoader/Sample.nmml @@ -11,8 +11,8 @@ /> 0 ? pendingURL.substr(dot + 1).toLowerCase() : ""; - if(request.contentType == null || - request.contentType.length == 0 || - request.contentType == "application/x-www-form-urlencoded") - contentType = switch(extension) + if (request.contentType == null || + request.contentType.length == 0 || + request.contentType == "application/x-www-form-urlencoded") { - case "swf": "application/x-shockwave-flash"; - case "jpg","jpeg": "image/jpeg"; - case "png": "image/png"; - case "gif": "image/gif"; - default: - throw "Unrecognized file " + pendingURL; + contentType = switch(extension) + { + case "swf": "application/x-shockwave-flash"; + case "jpg","jpeg": "image/jpeg"; + case "png": "image/png"; + case "gif": "image/gif"; + default: null; + //throw "Unrecognized file " + pendingURL; + } } diff --git a/src/nme/net/HttpLoader.hx b/src/nme/net/HttpLoader.hx index 6291849ff..8523e192c 100644 --- a/src/nme/net/HttpLoader.hx +++ b/src/nme/net/HttpLoader.hx @@ -70,7 +70,6 @@ class HttpLoader http = new Http(inRequest.url); http.onError = onError; - http.onStatus = onStatus; for(header in urlRequest.requestHeaders) @@ -81,11 +80,7 @@ class HttpLoader var isPost = urlRequest.method==URLRequestMethod.POST; if (isPost) - #if haxe4 http.setPostBytes(urlRequest.nmeBytes); - #else - http.setPostData(urlRequest.nmeBytes.toString()); - #end runAsync(run); } diff --git a/src/nme/net/URLLoader.hx b/src/nme/net/URLLoader.hx index 22187b393..3e115b95f 100644 --- a/src/nme/net/URLLoader.hx +++ b/src/nme/net/URLLoader.hx @@ -8,6 +8,7 @@ import nme.events.ProgressEvent; import nme.events.HTTPStatusEvent; import nme.utils.ByteArray; import nme.Loader; +import nme.net.HttpLoader; #if html5 // ok @@ -20,13 +21,8 @@ import cpp.FileSystem; import cpp.io.File; #end -#if NME_USE_HTTP -typedef HttpHandle = nme.net.HttpLoader; -#else import nme.NativeHandle; import nme.NativeResource; -typedef HttpHandle = NativeHandle; -#end @@ -38,7 +34,10 @@ class URLLoader extends EventDispatcher public var data:Dynamic; public var dataFormat:URLLoaderDataFormat; - public var nmeHandle:HttpHandle; + public var nmeHandle:NativeHandle; + public var httpLoader:HttpLoader; + + private static var hasCurlLoader = false; private static var activeLoaders = new List(); public static inline var urlInvalid = 0; @@ -64,6 +63,8 @@ class URLLoader extends EventDispatcher load(request); } + override public function toString() return 'URLLoader(${nmeHandle!=null?"curl":httpLoader!=null?"http":"null"})'; + public function close() { } @@ -116,13 +117,22 @@ class URLLoader extends EventDispatcher else { request.nmePrepare(); - nmeHandle = createLoader(request); - if (nmeHandle == null) + nmeHandle = nme_curl_create(request); + if (nmeHandle==null) + { + httpLoader = new HttpLoader(this,request); + } + else + { + hasCurlLoader = true; + } + + if (nmeHandle==null && HttpLoader==null) onError("Could not open URL"); else { - #if js nme.NativeResource.lockHandler(this); #end + #if js if (nmeHandle!=null) nme.NativeResource.lockHandler(this); #end activeLoaders.push(this); } } @@ -192,9 +202,9 @@ class URLLoader extends EventDispatcher dispatchEvent (evt); } - /** @private */ private function update() + private function update() { - if (nmeHandle != null) + if (nmeHandle!=null || httpLoader!=null) { var old_loaded = bytesLoaded; var old_total = bytesTotal; @@ -251,41 +261,76 @@ class URLLoader extends EventDispatcher } - #if NME_USE_HTTP - function getErrorMessage() : String return nmeHandle.getErrorMessage(); - function getData(): ByteArray return nmeHandle.getData(); - function getString(): String return nmeHandle.getString(); - function getCode(): Int return nmeHandle.getCode(); + + function getErrorMessage() : String + { + if (nmeHandle!=null) + return nme_curl_get_error_message(nmeHandle); + return httpLoader.getErrorMessage(); + } + function getData(): ByteArray + { + if (nmeHandle!=null) + return nme_curl_get_data(nmeHandle); + return httpLoader.getData(); + } + function getString(): String + { + if (nmeHandle!=null) + { + var bytes:ByteArray = getData(); + return bytes == null ? "" : bytes.asString(); + } + return httpLoader.getString(); + } + function getCode(): Int + { + if (nmeHandle!=null) + return nme_curl_get_code(nmeHandle); + return httpLoader.getCode(); + } function updateLoader() { - bytesLoaded = nmeHandle.bytesLoaded; - bytesTotal = nmeHandle.bytesTotal; - state = nmeHandle.state; + if (nmeHandle!=null) + { + nme_curl_update_loader(nmeHandle,this); + } + else + { + bytesLoaded = httpLoader.bytesLoaded; + bytesTotal = httpLoader.bytesTotal; + state = httpLoader.state; + } } - function getHeaders() : Array return nmeHandle.getHeaders(); - function createLoader(request:URLRequest): HttpLoader return new HttpLoader(this,request); - public function getCookies():Array return nmeHandle==null ? null : nmeHandle.getCookies(); - static function pollLoaders() HttpLoader.pollAll(); - function disposeHandler() { } - #else - function getErrorMessage() : String return nme_curl_get_error_message(nmeHandle); - function getData(): ByteArray return nme_curl_get_data(nmeHandle); - function getString() : String + function getHeaders() : Array { - var bytes:ByteArray = getData(); - return bytes == null ? "" : bytes.asString(); + if (nmeHandle!=null) + return nme_curl_get_headers(nmeHandle); + return httpLoader.getHeaders(); } - function getCode(): Int return nme_curl_get_code(nmeHandle); - function updateLoader() nme_curl_update_loader(nmeHandle,this); - function getHeaders() : Array return nme_curl_get_headers(nmeHandle); - function createLoader(request:URLRequest) : NativeHandle return nme_curl_create(request); - public function getCookies():Array return nme_curl_get_cookies(nmeHandle); - static function pollLoaders() nme_curl_process_loaders(); + + + public function getCookies():Array + { + if (nmeHandle!=null) + return nme_curl_get_cookies(nmeHandle); + return httpLoader==null ? null : httpLoader.getCookies(); + } + + static function pollLoaders() + { + if (hasCurlLoader) + nme_curl_process_loaders(); + } + function disposeHandler() { - nme.NativeResource.disposeHandler(this); + if (nmeHandle!=null) + nme.NativeResource.disposeHandler(this); } + + // Native Methods private static var nme_curl_create = Loader.load("nme_curl_create", 1); private static var nme_curl_process_loaders = Loader.load("nme_curl_process_loaders", 0); @@ -296,7 +341,6 @@ class URLLoader extends EventDispatcher private static var nme_curl_get_cookies = Loader.load("nme_curl_get_cookies", 1); private static var nme_curl_get_headers = Loader.load("nme_curl_get_headers", 1); private static var nme_curl_initialize = Loader.load("nme_curl_initialize", 1); - #end } #else diff --git a/src/nme/net/URLRequest.hx b/src/nme/net/URLRequest.hx index c85d33134..7380a4ad8 100644 --- a/src/nme/net/URLRequest.hx +++ b/src/nme/net/URLRequest.hx @@ -29,10 +29,11 @@ class URLRequest /** @private */ public var __bytes:ByteArray; /** @private */ public var nmeBytes(get, set):ByteArray; - public function new(?inURL:String) + public function new(?inURL:String,?inData:Dynamic) { if (inURL != null) url = inURL; + data = inData; requestHeaders = []; method = URLRequestMethod.GET; @@ -96,7 +97,7 @@ class URLRequest var vars:URLVariables = new URLVariables(); for(i in Reflect.fields(data)) - Reflect.setField(vars, i, Reflect.field(data, i)); + vars.set(i, Reflect.field(data, i)); var str = vars.toString(); nmeBytes = new ByteArray(); diff --git a/src/nme/net/URLVariables.hx b/src/nme/net/URLVariables.hx index 6a79b19ea..fd11cdf60 100644 --- a/src/nme/net/URLVariables.hx +++ b/src/nme/net/URLVariables.hx @@ -1,49 +1,6 @@ package nme.net; -#if (!flash && (haxe_ver<4)) -@:nativeProperty -class URLVariables implements Dynamic -{ - public function new(?inEncoded:String) - { - if (inEncoded != null) - decode(inEncoded); - } - - public function decode(inVars:String) - { - var fields = Reflect.fields(this); - - for(f in fields) - Reflect.deleteField(this, f); - - var fields = inVars.split(";").join("&").split("&"); - - for(f in fields) - { - var eq = f.indexOf("="); - - if (eq > 0) - Reflect.setField(this, StringTools.urlDecode(f.substr(0, eq)), StringTools.urlDecode(f.substr(eq + 1))); - else if (eq != 0) - Reflect.setField(this, StringTools.urlDecode(f), ""); - } - } - - public function toString():String - { - var result = new Array(); - var fields = Reflect.fields(this); - - for(f in fields) - result.push(StringTools.urlEncode(f) + "=" + StringTools.urlEncode(Reflect.field(this, f))); - - return result.join("&"); - } -} -typedef URLVariablesBase = URLVariables; - -#elseif (!flash) +#if (!flash) class URLVariablesBase {