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(); }
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); } }
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); }
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)); }
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));
public static Future <Either <ErrorMsg, byte[]> > downloadToRamSimpleError( this UnityWebRequest req, AcceptedResponseCodes acceptedResponseCodes ) => req.downloadToRam(acceptedResponseCodes).map(_ => _.mapLeft(err => err.simplify));