public void Post(UWebRequest request, UWebArg customArgs, UWebMgr.OnWebResponse onResponse, UWebMgr.OnWebError onError, float timeOutInterval) { UWebRequestProxy proxy = new UWebRequestProxy(); proxy.m_Request = request; if (request.isCompressed) { customArgs.Add("compress", 1); } if (m_isUrlArgs) { proxy.m_UrlArgs = customArgs.ToString(); proxy.m_MergedArgs = customArgs.GetMergedArgs(); } else { proxy.m_Form = customArgs.ToForm(); } proxy.m_OnResponse = onResponse; proxy.m_OnError = onError; proxy.m_TimeOutInterval = timeOutInterval; proxy.m_LocalArg = customArgs.localArg; m_RequestQueue.Enqueue(proxy); }
void Update() { if (m_ActiveRequestProxy == null && m_RequestQueue.Count > 0) { //temp: optimize m_ActiveRequestProxy = m_RequestQueue.Dequeue(); m_PostCoroutine = DoPost(); StartCoroutine(m_PostCoroutine); } }
IEnumerator DoPost() { //var headers = m_ActiveRequestProxy.m_Form.headers; var headers = new Dictionary <string, string>(); headers["Accept-Encoding"] = "identity"; //string url = m_UrlRoot + "?ctl=" + m_ActiveRequestProxy.m_Request.remoteClass + "&act=" + m_ActiveRequestProxy.m_Request.remoteMethod; string url = m_UrlRoot + m_ActiveRequestProxy.m_Request.remoteParentName + "/" + m_ActiveRequestProxy.m_Request.remoteName + "/" + m_ActiveRequestProxy.m_Request.remoteFolder + "/" + m_ActiveRequestProxy.m_Request.remoteMethod + "?"; if (!string.IsNullOrEmpty(m_SessionToken)) { url += "token=" + m_SessionToken; } if (!string.IsNullOrEmpty(m_ActiveRequestProxy.m_UrlArgs)) { url += "&" + m_ActiveRequestProxy.m_UrlArgs; } //if (m_isUseSignature) //{ // string merged = m_ActiveRequestProxy.m_Request.remoteClass + m_ActiveRequestProxy.m_Request.remoteMethod + m_SessionToken + m_ActiveRequestProxy.m_MergedArgs + m_Salt; // string md5 = UUtil.Md5Sum(merged); // url += "&" + "sign=" + md5; //} float timeOut = Time.realtimeSinceStartup + m_ActiveRequestProxy.m_TimeOutInterval; //using (WWW www = new WWW(url, m_ActiveRequestProxy.m_Form.data, headers)) Debug.Log("Web Request:" + url); if (m_OnPostBegin != null) { m_OnPostBegin(); } using (WWW www = new WWW(url, (m_ActiveRequestProxy.m_Form != null) ? m_ActiveRequestProxy.m_Form.data : null, headers)) { while (Time.realtimeSinceStartup < timeOut) { if (!www.isDone) { yield return(null); } else { break; } } object data = null; if (www.isDone) { string strData = string.Empty; //iOS decompress packets by default #if !UNITY_IPHONE if (m_ActiveRequestProxy.m_Request.isCompressed) { //Debuger.LogError("Bytes downloaded:" + www.bytesDownloaded + "," + www.bytes.Length); //Debuger.LogError("Bytes:" + ByteArrayToString(www.bytes)); //Debuger.LogError("String:" + www.text); strData = UZipUtil.UnzipMemoryData(www.bytes); } else #endif { strData = www.text; } Debug.Log("Web Response:" + strData); if (strData.Contains("404 NOT Found")) { if (m_OnPostEnd != null) { m_OnPostEnd(data); } yield break; } data = m_ActiveRequestProxy.m_Request.ToDataObject(strData); if (m_ActiveRequestProxy.m_OnResponse != null) { m_ActiveRequestProxy.m_OnResponse(m_ActiveRequestProxy.m_Request.id, data, m_ActiveRequestProxy.m_LocalArg); } if (m_ErrMsgReporter != null) { m_ErrMsgReporter(m_ActiveRequestProxy.m_Request.id, data); } //hook if (m_ResponseHook != null) { m_ResponseHook(m_ActiveRequestProxy.m_Request.id, strData, m_ActiveRequestProxy.m_LocalArg); } } else { if (m_ActiveRequestProxy.m_OnError != null) { m_ActiveRequestProxy.m_OnError(m_ActiveRequestProxy.m_Request.id, m_PostFailureMsg); } //hook if (m_ErrorHook != null) { m_ErrorHook(m_ActiveRequestProxy.m_Request.id, m_PostFailureMsg); } } m_ActiveRequestProxy = null; if (m_OnPostEnd != null) { m_OnPostEnd(data); } } }