< Summary

Class:DCL.WebRequestController
Assembly:WebRequest
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/WebRequest/WebRequestController.cs
Covered lines:30
Uncovered lines:3
Coverable lines:33
Total lines:179
Line coverage:90.9% (30 of 33)
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%4.254075%
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 IWebRequest textureWebRequest;
 13        private IWebRequestAudio audioClipWebRequest;
 54514        private List<WebRequestAsyncOperation> ongoingWebRequests = new List<WebRequestAsyncOperation>();
 15
 16        public static WebRequestController Create()
 17        {
 54518            WebRequestController newWebRequestController = new WebRequestController();
 19
 54520            newWebRequestController.Initialize(
 21                genericWebRequest: new WebRequest(),
 22                assetBundleWebRequest: new WebRequestAssetBundle(),
 23                textureWebRequest: new WebRequestTexture(),
 24                audioClipWebRequest: new WebRequestAudio());
 25
 54526            return newWebRequestController;
 27        }
 28
 29        public void Initialize(
 30            IWebRequest genericWebRequest,
 31            IWebRequestAssetBundle assetBundleWebRequest,
 32            IWebRequest textureWebRequest,
 33            IWebRequestAudio audioClipWebRequest)
 34        {
 56935            this.genericWebRequest = genericWebRequest;
 56936            this.assetBundleWebRequest = assetBundleWebRequest;
 56937            this.textureWebRequest = textureWebRequest;
 56938            this.audioClipWebRequest = audioClipWebRequest;
 56939        }
 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        {
 11251            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        {
 2274            assetBundleWebRequest.SetHash(hash);
 2275            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        {
 11586            return SendWebRequest(textureWebRequest, url, null, OnSuccess, OnFail, requestAttemps, timeout, disposeOnCom
 87        }
 88
 89        public WebRequestAsyncOperation GetAudioClip(
 90            string url,
 91            AudioType audioType,
 92            Action<UnityWebRequest> OnSuccess = null,
 93            Action<UnityWebRequest> OnFail = null,
 94            int requestAttemps = 3,
 95            int timeout = 0,
 96            bool disposeOnCompleted = true)
 97        {
 1498            audioClipWebRequest.SetAudioType(audioType);
 1499            return SendWebRequest(audioClipWebRequest, url, null, OnSuccess, OnFail, requestAttemps, timeout, disposeOnC
 100        }
 101
 102        private WebRequestAsyncOperation SendWebRequest<T>(
 103            T requestType,
 104            string url,
 105            DownloadHandler downloadHandler,
 106            Action<UnityWebRequest> OnSuccess,
 107            Action<UnityWebRequest> OnFail,
 108            int requestAttemps,
 109            int timeout,
 110            bool disposeOnCompleted,
 111            Dictionary<string, string> headers = null
 112        ) where T : IWebRequest
 113        {
 263114            int remainingAttemps = Mathf.Clamp(requestAttemps, 1, requestAttemps);
 115
 263116            UnityWebRequest request = requestType.CreateWebRequest(url);
 263117            request.timeout = timeout;
 263118            if (headers != null)
 119            {
 0120                foreach (var item in headers)
 121                {
 0122                    request.SetRequestHeader(item.Key, item.Value);
 123                }
 124            }
 125
 263126            if (downloadHandler != null)
 94127                request.downloadHandler = downloadHandler;
 128
 263129            WebRequestAsyncOperation resultOp = new WebRequestAsyncOperation(request);
 263130            resultOp.disposeOnCompleted = disposeOnCompleted;
 263131            ongoingWebRequests.Add(resultOp);
 132
 263133            UnityWebRequestAsyncOperation requestOp = resultOp.webRequest.SendWebRequest();
 263134            requestOp.completed += (asyncOp) =>
 135            {
 136                if (!resultOp.isDisposed)
 137                {
 138                    if (resultOp.webRequest.WebRequestSucceded())
 139                    {
 140                        OnSuccess?.Invoke(resultOp.webRequest);
 141                        resultOp.SetAsCompleted(true);
 142                    }
 143                    else if (!resultOp.webRequest.WebRequestAborted() && resultOp.webRequest.WebRequestServerError())
 144                    {
 145                        remainingAttemps--;
 146                        if (remainingAttemps > 0)
 147                        {
 148                            Debug.LogWarning($"Retrying web request: {url} ({remainingAttemps} attemps remaining)");
 149                            resultOp.Dispose();
 150                            resultOp = SendWebRequest(requestType, url, downloadHandler, OnSuccess, OnFail, remainingAtt
 151                        }
 152                        else
 153                        {
 154                            OnFail?.Invoke(resultOp.webRequest);
 155                            resultOp.SetAsCompleted(false);
 156                        }
 157                    }
 158                    else
 159                    {
 160                        OnFail?.Invoke(resultOp.webRequest);
 161                        resultOp.SetAsCompleted(false);
 162                    }
 163                }
 164
 165                ongoingWebRequests.Remove(resultOp);
 166            };
 167
 263168            return resultOp;
 169        }
 170
 171        public void Dispose()
 172        {
 1332173            foreach (var webRequest in ongoingWebRequests)
 174            {
 92175                webRequest.Dispose();
 176            }
 574177        }
 178    }
 179}