< Summary

Class:DCL.WebRequestController
Assembly:WebRequest
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/WebRequest/WebRequestController.cs
Covered lines:33
Uncovered lines:4
Coverable lines:37
Total lines:188
Line coverage:89.1% (33 of 37)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
WebRequestController()0%110100%
Create()0%110100%
Initialize(...)0%110100%
Get(...)0%110100%
GetAssetBundle(...)0%2100%
GetAssetBundle(...)0%110100%
GetTexture(...)0%110100%
GetAudioClip(...)0%110100%
SendWebRequest[T](...)0%5.465073.68%
Dispose()0%220100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/WebRequest/WebRequestController.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using UnityEngine;
 4using UnityEngine.Networking;
 5
 6namespace DCL
 7{
 8    public class WebRequestController : IWebRequestController
 9    {
 10        private IWebRequest genericWebRequest;
 11        private IWebRequestAssetBundle assetBundleWebRequest;
 12        private IWebRequestTexture textureWebRequest;
 13        private IWebRequestAudio audioClipWebRequest;
 70214        private List<WebRequestAsyncOperation> ongoingWebRequests = new List<WebRequestAsyncOperation>();
 15
 16        public static WebRequestController Create()
 17        {
 70218            WebRequestController newWebRequestController = new WebRequestController();
 19
 70220            newWebRequestController.Initialize(
 21                genericWebRequest: new WebRequest(),
 22                assetBundleWebRequest: new WebRequestAssetBundle(),
 23                textureWebRequest: new WebRequestTexture(),
 24                audioClipWebRequest: new WebRequestAudio());
 25
 70226            return newWebRequestController;
 27        }
 28
 29        public void Initialize(
 30            IWebRequest genericWebRequest,
 31            IWebRequestAssetBundle assetBundleWebRequest,
 32            IWebRequestTexture textureWebRequest,
 33            IWebRequestAudio audioClipWebRequest)
 34        {
 72635            this.genericWebRequest = genericWebRequest;
 72636            this.assetBundleWebRequest = assetBundleWebRequest;
 72637            this.textureWebRequest = textureWebRequest;
 72638            this.audioClipWebRequest = audioClipWebRequest;
 72639        }
 40
 41        public WebRequestAsyncOperation Get(
 42            string url,
 43            DownloadHandler downloadHandler = null,
 44            Action<UnityWebRequest> OnSuccess = null,
 45            Action<UnityWebRequest> OnFail = null,
 46            int requestAttemps = 3,
 47            int timeout = 0,
 48            bool disposeOnCompleted = true,
 49            Dictionary<string, string> headers = null)
 50        {
 20251            return SendWebRequest(genericWebRequest, url, downloadHandler, OnSuccess, OnFail, requestAttemps, timeout, d
 52        }
 53
 54        public WebRequestAsyncOperation GetAssetBundle(
 55            string url,
 56            Action<UnityWebRequest> OnSuccess = null,
 57            Action<UnityWebRequest> OnFail = null,
 58            int requestAttemps = 3,
 59            int timeout = 0,
 60            bool disposeOnCompleted = true)
 61        {
 062            return SendWebRequest(assetBundleWebRequest, url, null, OnSuccess, OnFail, requestAttemps, timeout, disposeO
 63        }
 64
 65        public WebRequestAsyncOperation GetAssetBundle(
 66            string url,
 67            Hash128 hash,
 68            Action<UnityWebRequest> OnSuccess = null,
 69            Action<UnityWebRequest> OnFail = null,
 70            int requestAttemps = 3,
 71            int timeout = 0,
 72            bool disposeOnCompleted = true)
 73        {
 1974            assetBundleWebRequest.SetHash(hash);
 1975            return SendWebRequest(assetBundleWebRequest, url, null, OnSuccess, OnFail, requestAttemps, timeout, disposeO
 76        }
 77
 78        public WebRequestAsyncOperation GetTexture(
 79            string url,
 80            Action<UnityWebRequest> OnSuccess = null,
 81            Action<UnityWebRequest> OnFail = null,
 82            int requestAttemps = 3,
 83            int timeout = 0,
 84            bool disposeOnCompleted = true,
 85            bool isReadable = true)
 86        {
 13487            textureWebRequest.isReadable = isReadable;
 13488            return SendWebRequest(textureWebRequest, url, null, OnSuccess, OnFail, requestAttemps, timeout, disposeOnCom
 89        }
 90
 91        public WebRequestAsyncOperation GetAudioClip(
 92            string url,
 93            AudioType audioType,
 94            Action<UnityWebRequest> OnSuccess = null,
 95            Action<UnityWebRequest> OnFail = null,
 96            int requestAttemps = 3,
 97            int timeout = 0,
 98            bool disposeOnCompleted = true)
 99        {
 23100            audioClipWebRequest.SetAudioType(audioType);
 23101            return SendWebRequest(audioClipWebRequest, url, null, OnSuccess, OnFail, requestAttemps, timeout, disposeOnC
 102        }
 103
 104        private WebRequestAsyncOperation SendWebRequest<T>(
 105            T requestType,
 106            string url,
 107            DownloadHandler downloadHandler,
 108            Action<UnityWebRequest> OnSuccess,
 109            Action<UnityWebRequest> OnFail,
 110            int requestAttemps,
 111            int timeout,
 112            bool disposeOnCompleted,
 113            Dictionary<string, string> headers = null,
 114            WebRequestAsyncOperation asyncOp = null
 115        ) where T : IWebRequest
 116        {
 378117            int remainingAttemps = Mathf.Clamp(requestAttemps, 1, requestAttemps);
 118
 378119            UnityWebRequest request = requestType.CreateWebRequest(url);
 378120            request.timeout = timeout;
 378121            if (headers != null)
 122            {
 0123                foreach (var item in headers)
 124                {
 0125                    request.SetRequestHeader(item.Key, item.Value);
 126                }
 127            }
 128
 378129            if (downloadHandler != null)
 175130                request.downloadHandler = downloadHandler;
 131
 378132            WebRequestAsyncOperation resultOp = asyncOp;
 133
 378134            if (resultOp == null)
 378135                resultOp = new WebRequestAsyncOperation(request);
 136            else
 0137                resultOp.SetNewWebRequest(request);
 138
 378139            resultOp.disposeOnCompleted = disposeOnCompleted;
 378140            ongoingWebRequests.Add(resultOp);
 141
 378142            UnityWebRequestAsyncOperation requestOp = resultOp.webRequest.SendWebRequest();
 378143            requestOp.completed += (asyncOp) =>
 144            {
 145                if (!resultOp.isDisposed)
 146                {
 147                    if (resultOp.webRequest.WebRequestSucceded())
 148                    {
 149                        OnSuccess?.Invoke(resultOp.webRequest);
 150                        resultOp.SetAsCompleted(true);
 151                    }
 152                    else if (!resultOp.webRequest.WebRequestAborted() && resultOp.webRequest.WebRequestServerError())
 153                    {
 154                        remainingAttemps--;
 155                        if (remainingAttemps > 0)
 156                        {
 157                            Debug.LogWarning($"Retrying web request: {url} ({remainingAttemps} attemps remaining)");
 158                            resultOp.Dispose();
 159                            resultOp = SendWebRequest(requestType, url, downloadHandler, OnSuccess, OnFail, remainingAtt
 160                        }
 161                        else
 162                        {
 163                            OnFail?.Invoke(resultOp.webRequest);
 164                            resultOp.SetAsCompleted(false);
 165                        }
 166                    }
 167                    else
 168                    {
 169                        OnFail?.Invoke(resultOp.webRequest);
 170                        resultOp.SetAsCompleted(false);
 171                    }
 172                }
 173
 174                ongoingWebRequests.Remove(resultOp);
 175            };
 176
 378177            return resultOp;
 178        }
 179
 180        public void Dispose()
 181        {
 1646182            foreach (var webRequest in ongoingWebRequests)
 183            {
 80184                webRequest.Dispose();
 185            }
 743186        }
 187    }
 188}