Пример #1
0
        public async Task <T> GetResult <T>()
        {
            if (!request.isModifiable)   // Request was already sent
            {
                await WaitForRequestToFinish();

                return(request.GetResult <T>());
            }
            return(await SendRequest(new Response <T>()));
        }
Пример #2
0
 private static void HandleResult <T>(UnityWebRequest self, Response <T> resp)
 {
     if (self.isNetworkError || self.isHttpError)
     {
         resp.onError(self, new Exception(self.error));
     }
     else
     {
         try { resp.onResult.InvokeIfNotNull(self.GetResult <T>()); } catch (Exception e) { resp.onError(self, e); }
     }
 }
Пример #3
0
 public Task <T> GetResult <T>()
 {
     waitForRequestToBeConfigured.TrySetResult(true);
     return(MainThread.instance.ExecuteOnMainThreadAsync(async() => {
         if (!request.isModifiable)   // Request was already sent
         {
             await WaitForRequestToFinish();
             return request.GetResult <T>();
         }
         return await SendRequest(new Response <T>());
     }));
 }
Пример #4
0
 private static void HandleResult <T>(UnityWebRequest self, Response <T> resp)
 {
     if (self.isNetworkError || self.isHttpError)
     {
         resp.onError.InvokeIfNotNull(self, new Exception("[" + self.responseCode + "] " + self.error));
     }
     else     // .onResult is only informed if there was no network or http error:
     {
         try { resp.onResult?.Invoke(self.GetResult <T>()); }
         catch (Exception e) { resp.onError.InvokeIfNotNull(self, e); }
     }
 }
Пример #5
0
        private static IEnumerator SendAndWait <T>(this UnityWebRequest self, Response <T> resp)
        {
            var timer = Stopwatch.StartNew();

            try {
                SetupDownloadAndUploadHanders(self, resp);
                resp.duration = Stopwatch.StartNew();
                self.ApplyAllCookiesToRequest();
                resp.debugInfo = self.method + " " + self.url;
                // Log.d("Sending: " + resp);
            }
            catch (Exception ex) { resp.onError(self, ex); throw; }
            var req = self.SendWebRequest();

            timer.AssertUnderXms(40);
            while (!req.isDone)
            {
                try {
                    var currentProgress = req.progress * 100;
                    if (resp.progressInPercent.SetNewValue(currentProgress))
                    {
                        timer.Restart();
                        resp.onProgress.InvokeIfNotNull(resp.progressInPercent.value);
                    }
                }
                catch (Exception ex) { resp.onError(self, ex); throw; }
                yield return(resp.wait);

                if (timer.ElapsedMilliseconds > resp.maxMsWithoutProgress)
                {
                    self.Abort();
                }
            }
            try {
                resp.duration.Stop();
                // Log.d("   > Finished " + resp);
                AssertResponseLooksNormal(self, resp);
                self.SaveAllNewCookiesFromResponse();
                if (self.error.IsNullOrEmpty())
                {
                    resp.progressInPercent.SetNewValue(100);
                }
                resp.getResult = () => { return(self.GetResult <T>()); };
                ProcessServerDate(self.uri, self.GetResponseHeader("date"));
            }
            catch (Exception ex) { resp.onError(self, ex); throw; }
        }
Пример #6
0
        public static T GetResult <T>(this UnityWebRequest self, IJsonReader r)
        {
            AssertV2.IsTrue(self.isDone, "web request was not done!");
            if (TypeCheck.AreEqual <T, UnityWebRequest>())
            {
                return((T)(object)self);
            }
            if (typeof(Texture2D).IsCastableTo(typeof(T)))
            {
                AssertV2.IsTrue(self.downloadHandler is DownloadHandlerTexture,
                                "self.downloadHandler was not a DownloadHandlerTexture but a " + self.downloadHandler.GetType());
                var h = (DownloadHandlerTexture)self.downloadHandler;
                return((T)(object)h.texture);
                //return (T)(object)DownloadHandlerTexture.GetContent(self);
            }
            if (typeof(T).IsCastableTo <Exception>() && self.GetStatusCode().IsErrorStatus())
            {
                return((T)(object)new NoSuccessError(self.GetStatusCode(), self.GetResult <string>()));
            }
            if (TypeCheck.AreEqual <T, HttpStatusCode>())
            {
                return((T)(object)self.GetStatusCode());
            }
            if (TypeCheck.AreEqual <T, Stream>())
            {
                return((T)(object)new MemoryStream(GetBytesResult(self)));
            }
            if (TypeCheck.AreEqual <T, byte[]>())
            {
                return((T)(object)GetBytesResult(self));
            }
            if (TypeCheck.AreEqual <T, Headers>())
            {
                return((T)(object)self.GetResponseHeadersV2());
            }
            var text = GetStringResult(self);

            if (TypeCheck.AreEqual <T, string>())
            {
                return((T)(object)text);
            }
            return(r.Read <T>(text));
        }
Пример #7
0
        private static IEnumerator SendAndWait <T>(this UnityWebRequest self, Response <T> resp)
        {
            SetupDownloadAndUploadHanders(self, resp);
            resp.duration = Stopwatch.StartNew();
            var timer = Stopwatch.StartNew();

            self.ApplyAllCookiesToRequest();
            if (self.downloadHandler == null)
            {
                self.downloadHandler = resp.createDownloadHandler();
            }
            resp.debugInfo = self.method + " " + self.url + " with cookies=[" + self.GetRequestHeader("Cookie") + "]";
            Log.d("Sending: " + resp);
            var req = self.SendWebRequest();

            timer.AssertUnderXms(40);
            while (!req.isDone)
            {
                var currentProgress = req.progress * 100;
                if (resp.progressInPercent.setNewValue(currentProgress))
                {
                    timer.Restart();
                    resp.onProgress.InvokeIfNotNull(resp.progressInPercent.value);
                }
                yield return(resp.wait);

                if (timer.ElapsedMilliseconds > resp.maxMsWithoutProgress)
                {
                    self.Abort();
                }
            }
            resp.duration.Stop();
            Log.d("   > Finished " + resp);
            AssertResponseLooksNormal(self, resp);
            self.SaveAllNewCookiesFromResponse();
            if (self.error.IsNullOrEmpty())
            {
                resp.progressInPercent.setNewValue(100);
            }
            resp.getResult = () => { return(self.GetResult <T>()); };
        }
Пример #8
0
 private static void HandleResult <T>(UnityWebRequest self, Response <T> resp)
 {
     if (self.isNetworkError || self.isHttpError)
     {
         resp.onError.InvokeIfNotNull(self, new Exception("[" + self.responseCode + "] " + self.error));
     }
     else
     {
         try {
             if (resp.onResult != null)
             {
                 resp.onResult(self.GetResult <T>());
             }
             else
             {
                 Log.d("resp.onResult was null, resp.GetResult has to be called manually");
             }
         }
         catch (Exception e) { resp.onError.InvokeIfNotNull(self, e); }
     }
 }
Пример #9
0
 public static T GetResult <T>(this UnityWebRequest self)
 {
     return(self.GetResult <T>(JsonReader.GetReader()));
 }
 public T GetResult()
 {
     return(_request.GetResult <T>());
 }