< Summary

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

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
WebRequestController()0%110100%
Initialize()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;
 81114        private List<WebRequestAsyncOperation> ongoingWebRequests = new List<WebRequestAsyncOperation>();
 15
 16        public void Initialize()
 17        {
 79418        }
 19
 20        public static WebRequestController Create()
 21        {
 81122            WebRequestController newWebRequestController = new WebRequestController();
 23
 81124            newWebRequestController.Initialize(
 25                genericWebRequest: new WebRequest(),
 26                assetBundleWebRequest: new WebRequestAssetBundle(),
 27                textureWebRequest: new WebRequestTexture(),
 28                audioClipWebRequest: new WebRequestAudio());
 29
 81130            return newWebRequestController;
 31        }
 32
 33        public void Initialize(
 34            IWebRequest genericWebRequest,
 35            IWebRequestAssetBundle assetBundleWebRequest,
 36            IWebRequestTexture textureWebRequest,
 37            IWebRequestAudio audioClipWebRequest)
 38        {
 81139            this.genericWebRequest = genericWebRequest;
 81140            this.assetBundleWebRequest = assetBundleWebRequest;
 81141            this.textureWebRequest = textureWebRequest;
 81142            this.audioClipWebRequest = audioClipWebRequest;
 81143        }
 44
 45        public IWebRequestAsyncOperation Get(
 46            string url,
 47            DownloadHandler downloadHandler = null,
 48            Action<IWebRequestAsyncOperation> OnSuccess = null,
 49            Action<IWebRequestAsyncOperation> OnFail = null,
 50            int requestAttemps = 3,
 51            int timeout = 0,
 52            bool disposeOnCompleted = true,
 53            Dictionary<string, string> headers = null)
 54        {
 20055            return SendWebRequest(genericWebRequest, url, downloadHandler, OnSuccess, OnFail, requestAttemps, timeout, d
 56        }
 57
 58        public WebRequestAsyncOperation GetAssetBundle(
 59            string url,
 60            Action<IWebRequestAsyncOperation> OnSuccess = null,
 61            Action<IWebRequestAsyncOperation> OnFail = null,
 62            int requestAttemps = 3,
 63            int timeout = 0,
 64            bool disposeOnCompleted = true)
 65        {
 066            return SendWebRequest(assetBundleWebRequest, url, null, OnSuccess, OnFail, requestAttemps, timeout, disposeO
 67        }
 68
 69        public WebRequestAsyncOperation GetAssetBundle(
 70            string url,
 71            Hash128 hash,
 72            Action<IWebRequestAsyncOperation> OnSuccess = null,
 73            Action<IWebRequestAsyncOperation> OnFail = null,
 74            int requestAttemps = 3,
 75            int timeout = 0,
 76            bool disposeOnCompleted = true)
 77        {
 3078            assetBundleWebRequest.SetHash(hash);
 3079            return SendWebRequest(assetBundleWebRequest, url, null, OnSuccess, OnFail, requestAttemps, timeout, disposeO
 80        }
 81
 82        public WebRequestAsyncOperation GetTexture(
 83            string url,
 84            Action<IWebRequestAsyncOperation> OnSuccess = null,
 85            Action<IWebRequestAsyncOperation> OnFail = null,
 86            int requestAttemps = 3,
 87            int timeout = 0,
 88            bool disposeOnCompleted = true,
 89            bool isReadable = true,
 90            Dictionary<string, string> headers = null)
 91        {
 22892            textureWebRequest.isReadable = isReadable;
 22893            return SendWebRequest(textureWebRequest, url, null, OnSuccess, OnFail, requestAttemps, timeout, disposeOnCom
 94        }
 95
 96        public WebRequestAsyncOperation GetAudioClip(
 97            string url,
 98            AudioType audioType,
 99            Action<IWebRequestAsyncOperation> OnSuccess = null,
 100            Action<IWebRequestAsyncOperation> OnFail = null,
 101            int requestAttemps = 3,
 102            int timeout = 0,
 103            bool disposeOnCompleted = true)
 104        {
 38105            audioClipWebRequest.SetAudioType(audioType);
 38106            return SendWebRequest(audioClipWebRequest, url, null, OnSuccess, OnFail, requestAttemps, timeout, disposeOnC
 107        }
 108
 109        private WebRequestAsyncOperation SendWebRequest<T>(
 110            T requestType,
 111            string url,
 112            DownloadHandler downloadHandler,
 113            Action<IWebRequestAsyncOperation> OnSuccess,
 114            Action<IWebRequestAsyncOperation> OnFail,
 115            int requestAttemps,
 116            int timeout,
 117            bool disposeOnCompleted,
 118            Dictionary<string, string> headers = null,
 119            WebRequestAsyncOperation asyncOp = null
 120        ) where T : IWebRequest
 121        {
 496122            int remainingAttemps = Mathf.Clamp(requestAttemps, 1, requestAttemps);
 123
 496124            UnityWebRequest request = requestType.CreateWebRequest(url);
 496125            request.timeout = timeout;
 496126            if (headers != null)
 127            {
 0128                foreach (var item in headers)
 129                {
 0130                    request.SetRequestHeader(item.Key, item.Value);
 131                }
 132            }
 133
 496134            if (downloadHandler != null)
 187135                request.downloadHandler = downloadHandler;
 136
 496137            WebRequestAsyncOperation resultOp = asyncOp;
 138
 496139            if (resultOp == null)
 496140                resultOp = new WebRequestAsyncOperation(request);
 141            else
 0142                resultOp.SetNewWebRequest(request);
 143
 496144            resultOp.disposeOnCompleted = disposeOnCompleted;
 496145            ongoingWebRequests.Add(resultOp);
 146
 496147            UnityWebRequestAsyncOperation requestOp = resultOp.SendWebRequest();
 496148            requestOp.completed += (asyncOp) =>
 149            {
 150                if (!resultOp.isDisposed)
 151                {
 152                    if (resultOp.webRequest.WebRequestSucceded())
 153                    {
 154                        OnSuccess?.Invoke(resultOp);
 155                        resultOp.SetAsCompleted(true);
 156                    }
 157                    else if (!resultOp.webRequest.WebRequestAborted() && resultOp.webRequest.WebRequestServerError())
 158                    {
 159                        remainingAttemps--;
 160                        if (remainingAttemps > 0)
 161                        {
 162                            resultOp.Dispose();
 163                            resultOp = SendWebRequest(requestType, url, downloadHandler, OnSuccess, OnFail, remainingAtt
 164                        }
 165                        else
 166                        {
 167                            OnFail?.Invoke(resultOp);
 168                            resultOp.SetAsCompleted(false);
 169                        }
 170                    }
 171                    else
 172                    {
 173                        OnFail?.Invoke(resultOp);
 174                        resultOp.SetAsCompleted(false);
 175                    }
 176                }
 177
 178                ongoingWebRequests.Remove(resultOp);
 179            };
 180
 496181            return resultOp;
 182        }
 183
 184        public void Dispose()
 185        {
 1888186            foreach (var webRequest in ongoingWebRequests)
 187            {
 130188                webRequest.Dispose();
 189            }
 814190        }
 191    }
 192}