/// <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; } }
/// <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(); }