Пример #1
0
        public static IEnumerator webRequestEnumerator <A>(
            UnityWebRequest req, Promise <Either <WebRequestError, A> > p, AcceptedResponseCodes acceptedResponseCodes,
            Fn <UnityWebRequest, A> onSuccess
            )
        {
            yield return(req.Send());

            var responseCode = req.responseCode;

            if (
#if UNITY_2018_2_OR_NEWER
                req.isNetworkError
#else
                req.isError
#endif
                )
            {
                var msg = $"error: {req.error}, response code: {responseCode}";
                var url = new Url(req.url);
                // no internet check
                if (responseCode == 0 && (req.error == "Unknown Error" || req.error == "Cannot resolve destination host"))
                {
                    checkForInternetConnection().onComplete(hasInternet => {
                        p.complete(hasInternet
              ? new WebRequestError(url, LogEntry.simple(msg))
              : new WebRequestError(url, new NoInternetError(msg)));
                    });
                }
                else
                {
                    p.complete(new WebRequestError(url, LogEntry.simple(msg)));
                }
                req.Dispose();
            }
Пример #2
0
        public static IEnumerator webRequestEnumerator <A>(
            UnityWebRequest req, Promise <Either <WebRequestError, A> > p, AcceptedResponseCodes acceptedResponseCodes,
            Fn <UnityWebRequest, A> onSuccess
            )
        {
            yield return(req.Send());

            var responseCode = req.responseCode;

            if (req.isError)
            {
                var msg = $"error: {req.error}, response code: {responseCode}";
                var url = new Url(req.url);
                p.complete(
                    responseCode == 0 && req.error == "Unknown Error"
          ? new WebRequestError(url, new NoInternetError(msg))
          : new WebRequestError(url, new ErrorMsg(msg))
                    );
                req.Dispose();
            }
            else if (!acceptedResponseCodes.contains(responseCode))
            {
                var url = new Url(req.url); // Capture URL before disposing
                req.Dispose();
                p.complete(new WebRequestError(url, new ErrorMsg(
                                                   $"Received response code {responseCode} was not in {acceptedResponseCodes}"
                                                   )));
            }
            else
            {
                var a = onSuccess(req);
                req.Dispose();
                p.complete(a);
            }
        }
Пример #3
0
        public static Future <Either <WebRequestError, A> > toFuture <A>(
            this UnityWebRequest req, AcceptedResponseCodes acceptedResponseCodes,
            Fn <UnityWebRequest, A> onSuccess
            )
        {
            var f = Future <Either <WebRequestError, A> > .async(out var promise);

            StartCoroutine(webRequestEnumerator(req, promise, acceptedResponseCodes, onSuccess));
            return(f);
        }
Пример #4
0
        public static Future <Either <WebRequestError, byte[]> > downloadToRam(
            this UnityWebRequest req, AcceptedResponseCodes acceptedResponseCodes
            )
        {
            var handler =
                req.downloadHandler is DownloadHandlerBuffer h
          ? h
          : new DownloadHandlerBuffer();

            req.downloadHandler = handler;
            return(req.toFuture(acceptedResponseCodes, _ => handler.data));
        }
Пример #5
0
 public static Future <Either <LogEntry, A> > toFutureSimple <A>(
     this UnityWebRequest req, AcceptedResponseCodes acceptedResponseCodes, Fn <UnityWebRequest, A> onSuccess
     ) => req.toFuture(acceptedResponseCodes, onSuccess).map(_ => _.mapLeft(err => err.simplify));
Пример #6
0
 public static Future <Either <ErrorMsg, byte[]> > downloadToRamSimpleError(
     this UnityWebRequest req, AcceptedResponseCodes acceptedResponseCodes
     ) => req.downloadToRam(acceptedResponseCodes).map(_ => _.mapLeft(err => err.simplify));