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;