/// <summary> /// Registers the network request. /// </summary> /// <param name="www">Www.</param> /// <param name="progressCallback">Callback for progrees.</param> /// <param name="action">Action.</param> internal static void RegisterNetworkRequest(WWW www, ProgressCallbackHelper progressCallback, Func <WWW, ProgressCallbackHelper, bool> action) { WWWRequestLooper.RunOnMainThread(() => { bool isDone = action(www, progressCallback); if (!isDone) { WWWRequestLooper.RegisterNetworkRequest(www, progressCallback, action); } }); }
private void _SendRequest(KiiHttpClientCallback callback) { if (callback == null) { throw new ArgumentNullException("callback is null"); } this.SetHttpMethodOverride(); WWWRequestLooper.RunOnMainThread(() => { this.ExecSendRequest(null, callback); }); }
public override void SendRequest(Stream body, KiiHttpClientProgressPercentageCallback progressCallback, KiiHttpClientCallback callback) { if (callback == null) { throw new ArgumentNullException("callback is null"); } this.body = ReadStream(body); this.SetHttpMethodOverride(); WWWRequestLooper.RunOnMainThread(() => { // TODO:If huge file will be uploaded, this way is bad performance. // Try to Upload an Object Body in Multiple Pieces // See:http://documentation.kii.com/en/guides/rest/managing-data/object-storages/uploading/ this.ExecSendRequest(new ProgressCallbackHelper(progressCallback), callback); }); }
private void ExecSendRequestForDownload(Stream outStream, ProgressCallbackHelper progressCallback, KiiHttpClientCallback callback) { if (callback == null) { callback(null, new ArgumentNullException("callback is null")); return; } if (outStream == null) { callback(null, new ArgumentNullException("outStream is null")); return; } float timeout = Time.realtimeSinceStartup + Timeout; this.SetHttpMethodOverride(); this.SetSDKClientInfo(); WWWRequestLooper.RunOnMainThread(() => { WWWRequestLooper.RegisterNetworkRequest(new WWW(this.url, this.body, this.headers.GetHeadersAsDictionary()), progressCallback, (WWW www, ProgressCallbackHelper progress) => { if (!www.isDone) { if (timeout < Time.realtimeSinceStartup) { DisposeWWW(www); callback(null, new NetworkException(new TimeoutException("Connection timeout. (did not finish within " + Timeout + " seconds)"))); return(true); } if (progress != null) { progress.NotifyDownloadProgress(www); } return(false); } else { try { Exception e = this.CheckHttpError(www); if (e != null) { callback(null, e); return(true); } ApiResponse response = new ApiResponse(); Dictionary <string, string> responseHeaders = WWWUtils.LowerCaseHeaders(www); this.CopyHttpHeaders(responseHeaders, response); response.Status = WWWUtils.GetStatusCode(responseHeaders, www.bytes == null ? 204 : 200); response.ContentType = WWWUtils.GetHeader(responseHeaders, "Content-Type"); response.ETag = WWWUtils.GetHeader(responseHeaders, "ETag"); response.Body = ""; if (www.bytes != null) { BinaryWriter writer = new BinaryWriter(outStream); writer.Write(www.bytes); } callback(response, null); return(true); } catch (Exception e) { callback(null, e); return(true); } finally { DisposeWWW(www); } } }); }); }