You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ah...@apache.org on 2018/08/02 00:44:14 UTC
[royale-asjs] 11/29: refactor URLLoader to try to make it functional
This is an automated email from the ASF dual-hosted git repository.
aharui pushed a commit to branch feature/MXRoyale
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
commit 26c578766fa4e4840caac386169786736c5f3f94
Author: Alex Harui <ah...@apache.org>
AuthorDate: Tue Jul 31 19:22:03 2018 -0700
refactor URLLoader to try to make it functional
---
.../Network/src/main/royale/NetworkClasses.as | 1 +
.../org/apache/royale/net/URLBinaryLoader.as | 2 +-
.../main/royale/org/apache/royale/net/URLLoader.as | 403 ++++++++++++---------
.../royale/net/{URLLoader.as => URLLoaderBase.as} | 12 +-
4 files changed, 245 insertions(+), 173 deletions(-)
diff --git a/frameworks/projects/Network/src/main/royale/NetworkClasses.as b/frameworks/projects/Network/src/main/royale/NetworkClasses.as
index 7836b00..afff91f 100644
--- a/frameworks/projects/Network/src/main/royale/NetworkClasses.as
+++ b/frameworks/projects/Network/src/main/royale/NetworkClasses.as
@@ -26,6 +26,7 @@ package
*/
internal class NetworkClasses
{
+ import org.apache.royale.net.URLLoader; URLLoader;
import org.apache.royale.net.URLBinaryLoader; URLBinaryLoader;
import org.apache.royale.net.HTTPConstants; HTTPConstants;
import org.apache.royale.net.URLBinaryUploader; URLBinaryUploader;
diff --git a/frameworks/projects/Network/src/main/royale/org/apache/royale/net/URLBinaryLoader.as b/frameworks/projects/Network/src/main/royale/org/apache/royale/net/URLBinaryLoader.as
index 46ab2ea..9a2f130 100644
--- a/frameworks/projects/Network/src/main/royale/org/apache/royale/net/URLBinaryLoader.as
+++ b/frameworks/projects/Network/src/main/royale/org/apache/royale/net/URLBinaryLoader.as
@@ -35,7 +35,7 @@ package org.apache.royale.net
* @playerversion AIR 2.6
* @productversion Royale 0.7.0
*/
- public class URLBinaryLoader extends URLLoader
+ public class URLBinaryLoader extends URLLoaderBase
{
/**
diff --git a/frameworks/projects/Network/src/main/royale/org/apache/royale/net/URLLoader.as b/frameworks/projects/Network/src/main/royale/org/apache/royale/net/URLLoader.as
index 08376f4..0ee6e35 100644
--- a/frameworks/projects/Network/src/main/royale/org/apache/royale/net/URLLoader.as
+++ b/frameworks/projects/Network/src/main/royale/org/apache/royale/net/URLLoader.as
@@ -16,62 +16,39 @@
// limitations under the License.
//
////////////////////////////////////////////////////////////////////////////////
-
package org.apache.royale.net
-{
- import org.apache.royale.events.EventDispatcher;
+{
+
+ COMPILE::SWF
+ {
+ import flash.events.HTTPStatusEvent;
+ import flash.events.IOErrorEvent;
+ import flash.net.URLLoader;
+ import flash.net.URLRequest;
+ import flash.net.URLRequestHeader;
+ }
+
+ import org.apache.royale.events.DetailEvent;
+ import org.apache.royale.events.Event;
+ import org.apache.royale.events.ProgressEvent;
+ import org.apache.royale.utils.BinaryData;
+ import org.apache.royale.utils.Endian;
+
- //--------------------------------------
- // Events
- //--------------------------------------
-
- /**
- * Dispatched when the request is complete.
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion Royale 0.0
- */
- [Event(name="complete", type="org.apache.royale.events.Event")]
-
- /**
- * Dispatched if an error occurs in the server communication.
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion Royale 0.0
- */
- [Event(name="communicationError", type="org.apache.royale.events.Event")]
-
- /**
- * Dispatched when an httpStatus code is received from the server.
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion Royale 0.0
- */
- [Event(name="httpStatus", type="org.apache.royale.events.Event")]
-
/**
- * The URLLoader class is a base class for the specific flavors of loaders such as binary,
- * text or variables
+ * The URLBinaryLoader class is a relatively low-level class designed to get
+ * binary data over HTTP the intent is to create similar classes for text and URL vars.
*
* @langversion 3.0
* @playerversion Flash 10.2
* @playerversion AIR 2.6
* @productversion Royale 0.7.0
*/
- public class URLLoader extends EventDispatcher
- {
- public function URLLoader()
- {
- }
-
+ public class URLLoader extends URLLoaderBase
+ {
+
/**
- * The status of the request.
+ * The number of bytes loaded so far.
*
* @langversion 3.0
* @playerversion Flash 10.2
@@ -80,148 +57,242 @@ package org.apache.royale.net
*
* @royalesuppresspublicvarwarning
*/
- public var requestStatus:int;
-
-
- protected function cleanupCallbacks():void
- {
- onComplete = null;
- onError = null;
- onProgress = null;
- onStatus = null;
- }
+ public var bytesLoaded:uint = 0;
- private var _onComplete:Function;
-
/**
- * Callback for complete event.
+ * The total number of bytes (if available).
*
* @langversion 3.0
* @playerversion Flash 10.2
* @playerversion AIR 2.6
* @productversion Royale 0.7.0
- */
- public function get onComplete():Function
- {
- return _onComplete;
- }
- public function set onComplete(value:Function):void
+ *
+ * @royalesuppresspublicvarwarning
+ */
+ public var bytesTotal:uint = 0;
+
+ COMPILE::JS
+ private var element:XMLHttpRequest;
+
+ public function URLLoader()
{
- _onComplete = value;
+ super();
+ COMPILE::JS
+ {
+ element = new XMLHttpRequest();
+ }
}
-
- private var _onError:Function;
- /**
- * Callback for error event.
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion Royale 0.7.0
- */
- public function get onError():Function
+ COMPILE::SWF
+ private var urlLoader:flash.net.URLLoader;
+
+ /**
+ * Makes the URL request.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.7.0
+ */
+ public function load(request:org.apache.royale.net.URLRequest):void
{
- return _onError;
+ // copied from HTTPService
+ COMPILE::SWF
+ {
+ if (!urlLoader)
+ urlLoader = new flash.net.URLLoader();
+ /*
+ var sawContentType:Boolean;
+ if (headers)
+ {
+ for each (var header:HTTPHeader in headers)
+ {
+ var urlHeader:flash.net.URLRequestHeader = new flash.net.URLRequestHeader(header.name, header.value);
+ request.requestHeaders.push(urlHeader);
+ if (header.name == HTTPHeader.CONTENT_TYPE)
+ sawContentType = true;
+ }
+ }
+ if (method != HTTPConstants.GET && !sawContentType && contentData != null)
+ {
+ urlHeader = new flash.net.URLRequestHeader(HTTPHeader.CONTENT_TYPE, contentType);
+ request.requestHeaders.push(urlHeader);
+ }
+ if (contentData)
+ {
+ if (method == HTTPConstants.GET)
+ {
+ if (url.indexOf("?") != -1)
+ url += contentData;
+ else
+ url += "?" + contentData;
+ }
+ else
+ request.data = contentData;
+ }
+ */
+ urlLoader.addEventListener(flash.events.Event.COMPLETE, completeHandler);
+ urlLoader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
+ if (HTTPStatusEvent.HTTP_RESPONSE_STATUS) // only on AIR
+ urlLoader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, statusHandler);
+ urlLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, statusHandler);
+ var req:flash.net.URLRequest = new flash.net.URLRequest();
+ req.url = request.url;
+ req.data = request.data;
+ req.method = request.method;
+ req.contentType = request.contentType;
+ var n:int = request.requestHeaders.length;
+ for (var i:int; i < n; i++)
+ {
+ var hdr:flash.net.URLRequestHeader =
+ new flash.net.URLRequestHeader(req[i].name, req[i].value);
+ req.requestHeaders.push(hdr);
+ }
+ urlLoader.load(req);
+ }
+ COMPILE::JS
+ {
+ var element:XMLHttpRequest = this.element as XMLHttpRequest;
+ element.onreadystatechange = progressHandler;
+
+ var url:String = request.url;
+
+ /*
+ var contentData:String = null;
+ if (_contentData != null) {
+ if (_method == HTTPConstants.GET) {
+ if (url.indexOf('?') != -1) {
+ url += _contentData;
+ } else {
+ url += '?' + _contentData;
+ }
+ } else {
+ contentData = _contentData;
+ }
+ }
+ */
+
+ element.open(request.method, request.url, true);
+ // element.timeout = _timeout;
+
+ var sawContentType:Boolean = false;
+ if (request.requestHeaders) {
+ var n:int = request.requestHeaders.length;
+ for (var i:int = 0; i < n; i++) {
+ var header:HTTPHeader = request.requestHeaders[i];
+ if (header.name == HTTPHeader.CONTENT_TYPE) {
+ sawContentType = true;
+ }
+
+ element.setRequestHeader(header.name, header.value);
+ }
+ }
+
+ /*
+ if (request.method != HTTPConstants.GET &&
+ !sawContentType && contentData) {
+ element.setRequestHeader(
+ HTTPHeader.CONTENT_TYPE, _contentType);
+ }
+ */
+ /*
+ if (contentData) {
+ element.send(contentData);
+ } else {*/
+ element.send();
+ /*
+ }
+ */
+ }
+
+ dispatchEvent(new Event("postSend"));
}
- public function set onError(value:Function):void
+
+ /**
+ * @copy org.apache.royale.net.BinaryUploader#statusHandler()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.0
+ */
+ COMPILE::SWF
+ protected function statusHandler(event:HTTPStatusEvent):void
{
- _onError = value;
+ /*
+ _status = event.status;
+ if ("responseHeaders" in event)
+ _responseHeaders = event.responseHeaders;
+ if ("responseURL" in event)
+ _responseURL = event.responseURL;
+ */
+ dispatchEvent(new Event(event.type));
}
-
- private var _onProgress:Function;
- /**
- * Callback for progress event.
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion Royale 0.7.0
- */
- public function get onProgress():Function
+ /**
+ * @copy org.apache.royale.net.BinaryUploader#ioErrorHandler()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.0
+ */
+ COMPILE::SWF
+ protected function ioErrorHandler(event:IOErrorEvent):void
{
- return _onProgress;
+ dispatchEvent(new Event(event.type));
}
- public function set onProgress(value:Function):void
+
+ /**
+ * @copy org.apache.royale.net.BinaryUploader#completeHandler()
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.0
+ */
+ COMPILE::SWF
+ protected function completeHandler(event:flash.events.Event):void
{
- _onProgress = value;
+ dispatchEvent(new Event(event.type));
}
-
- private var _onStatus:Function;
- /**
- * Callback for status event.
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion Royale 0.7.0
- */
- public function get onStatus():Function
+ /**
+ * @royaleignorecoercion XMLHttpRequest
+ */
+ COMPILE::JS
+ protected function progressHandler():void
{
- return _onStatus;
+ var element:XMLHttpRequest = this.element as XMLHttpRequest;
+ if (element.readyState == 2) {
+ dispatchEvent(HTTPConstants.RESPONSE_STATUS);
+ dispatchEvent(HTTPConstants.STATUS);
+ } else if (element.readyState == 4) {
+ dispatchEvent(HTTPConstants.COMPLETE);
+ }
}
- public function set onStatus(value:Function):void
+
+ /**
+ * The text returned from the server.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.0
+ * @royaleignorecoercion XMLHttpRequest
+ */
+ public function get data():String
{
- _onStatus = value;
+ COMPILE::SWF
+ {
+ return urlLoader.data;
+ }
+ COMPILE::JS
+ {
+ return element.responseText;
+ }
}
-
- /**
- * Convenience function for complete event to allow chaining.
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion Royale 0.7.0
- */
- public function complete(callback:Function):URLLoader
- {
- onComplete = callback;
- return this;
- }
-
- /**
- * Convenience function for error event to allow chaining.
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion Royale 0.7.0
- */
- public function error(callback:Function):URLLoader
- {
- onError = callback;
- return this;
- }
-
- /**
- * Convenience function for progress event to allow chaining.
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion Royale 0.7.0
- */
- public function progress(callback:Function):URLLoader
- {
- onProgress = callback;
- return this;
- }
-
- /**
- * Convenience function for status event to allow chaining.
- *
- * @langversion 3.0
- * @playerversion Flash 10.2
- * @playerversion AIR 2.6
- * @productversion Royale 0.7.0
- */
- public function status(callback:Function):URLLoader
- {
- onStatus = callback;
- return this;
- }
-
- }
+
+ }
}
+
diff --git a/frameworks/projects/Network/src/main/royale/org/apache/royale/net/URLLoader.as b/frameworks/projects/Network/src/main/royale/org/apache/royale/net/URLLoaderBase.as
similarity index 94%
copy from frameworks/projects/Network/src/main/royale/org/apache/royale/net/URLLoader.as
copy to frameworks/projects/Network/src/main/royale/org/apache/royale/net/URLLoaderBase.as
index 08376f4..7c3058e 100644
--- a/frameworks/projects/Network/src/main/royale/org/apache/royale/net/URLLoader.as
+++ b/frameworks/projects/Network/src/main/royale/org/apache/royale/net/URLLoaderBase.as
@@ -64,9 +64,9 @@ package org.apache.royale.net
* @playerversion AIR 2.6
* @productversion Royale 0.7.0
*/
- public class URLLoader extends EventDispatcher
+ public class URLLoaderBase extends EventDispatcher
{
- public function URLLoader()
+ public function URLLoaderBase()
{
}
@@ -175,7 +175,7 @@ package org.apache.royale.net
* @playerversion AIR 2.6
* @productversion Royale 0.7.0
*/
- public function complete(callback:Function):URLLoader
+ public function complete(callback:Function):URLLoaderBase
{
onComplete = callback;
return this;
@@ -189,7 +189,7 @@ package org.apache.royale.net
* @playerversion AIR 2.6
* @productversion Royale 0.7.0
*/
- public function error(callback:Function):URLLoader
+ public function error(callback:Function):URLLoaderBase
{
onError = callback;
return this;
@@ -203,7 +203,7 @@ package org.apache.royale.net
* @playerversion AIR 2.6
* @productversion Royale 0.7.0
*/
- public function progress(callback:Function):URLLoader
+ public function progress(callback:Function):URLLoaderBase
{
onProgress = callback;
return this;
@@ -217,7 +217,7 @@ package org.apache.royale.net
* @playerversion AIR 2.6
* @productversion Royale 0.7.0
*/
- public function status(callback:Function):URLLoader
+ public function status(callback:Function):URLLoaderBase
{
onStatus = callback;
return this;