Beispiel #1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="HttpEvent" /> class.
 /// </summary>
 /// <param name="type">The type.</param>
 /// <param name="target">The target of event.</param>
 /// <param name="response">The response object.</param>
 public HttpEvent(string type, object target = null, UrlResponse response = null)
     : base(type, target)
 {
     if (response != null)
     {
         mUrl             = response.url;
         mStatusCode      = response.statusCode;
         mError           = response.error;
         mData            = response.data;
         mResponseHeaders = response.responseHeaders;
     }
 }
Beispiel #2
0
        /// <summary>
        /// Request to server.
        /// </summary>
        /// <returns>IEnumerator.</returns>
        private IEnumerator Request()
        {
            WWW     www  = null;
            WWWForm form = null;
            string  url  = mRequest.url;

            if (mRequest.data is byte[])
            {
                // Post data.
                mRequest.method = UrlRequestMethod.Post;
            }
            else if (mRequest.data is UrlVariables)
            {
                // If transform data by get method, then add variables to the end of url.
                if (mRequest.method == UrlRequestMethod.Get)
                {
                    url += ((UrlVariables)mRequest.data).ToString();
                }
                else if (mRequest.method == UrlRequestMethod.Post)
                {
                    form = new WWWForm();
                    UrlVariables variables = (UrlVariables)mRequest.data;

                    foreach (KeyValuePair <string, string> kvp in variables.variables)
                    {
                        form.AddField(kvp.Key, kvp.Value);
                    }
                }
            }

            if (form != null)
            {
                www = new WWW(url, form);
            }
            else
            {
                if (mRequest.method == UrlRequestMethod.Post)
                {
                    www = (mRequest.requestHeaders != null) ?
                          new WWW(url, (byte[])mRequest.data, mRequest.requestHeaders) :
                          new WWW(url, (byte[])mRequest.data);
                }
                else if (mRequest.method == UrlRequestMethod.Get)
                {
                    www = new WWW(url);
                }
            }

            DispatchEvent(new HttpEvent(HttpEvent.OPEN, this, mRequest));

            yield return(www);

            int         statusCode = 0;
            UrlResponse response   = null;

            if (www.responseHeaders.Count > 0)
            {
                statusCode = ParseHttpStatusCode(www.responseHeaders);
                response   = new UrlResponse(statusCode, www);
            }

            // Remove task from TaskManager.
            if (mRequestTask != null)
            {
                TaskManager.instance.RemoveTask(mRequestTask);
            }

            if (www.responseHeaders.Count > 0)
            {
                DispatchEvent(new HttpStatusEvent(HttpStatusEvent.HTTP_STATUS, this, statusCode));
            }

            // Handle response data from server.
            if (!string.IsNullOrEmpty(www.error))
            {
                Debug.LogWarning("Http request error: " + www.error);

                if (mRequest.errorCallback != null)
                {
                    mRequest.errorCallback.Invoke(www.error);
                }

                DispatchEvent(new HttpEvent(HttpEvent.ERROR, this, response));
            }
            else
            {
                HttpEvent httpEvent = null;
                mBytesLoaded = www.bytesDownloaded;
                mBytesTotal  = www.size;

                if (!www.isDone)
                {
                    // In progress of downloading.
                    httpEvent          = new HttpEvent(HttpEvent.PROGRESS, this, response);
                    httpEvent.progress = www.progress;
                    DispatchEvent(httpEvent);
                }
                else
                {
                    // Dispatch event HttpStatusEvent.HTTP_STATUS.
                    if (www.responseHeaders.Count > 0)
                    {
                        if (statusCode > 0)
                        {
                            HttpStatusEvent httpStatusEvent = new HttpStatusEvent(HttpStatusEvent.HTTP_RESPONSE_STATUS, this, statusCode);
                            httpStatusEvent.responseHeaders = www.responseHeaders;
                            DispatchEvent(httpStatusEvent);
                        }
                    }

                    object data = ReflectionUtility.GetObjectPropertyValue(www, mDataFormatBindingProperties[mDataFormat]);

                    if (response != null)
                    {
                        response.data = data;
                    }

                    // Callback invoke
                    if (mRequest != null && mRequest.completeCallback != null)
                    {
                        mRequest.completeCallback.Invoke(response);
                    }

                    // Dispatch event HttpEvent.COMPLETE.
                    httpEvent = new HttpEvent(HttpEvent.COMPLETE, this, response);
                    DispatchEvent(httpEvent);
                }
            }

            www.Dispose();
        }