< Summary

Class:DCL.WebRequestController
Assembly:WebRequest
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/WebRequest/WebRequestController.cs
Covered lines:32
Uncovered lines:4
Coverable lines:36
Total lines:186
Line coverage:88.8% (32 of 36)
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 IWebRequest textureWebRequest;
 13        private IWebRequestAudio audioClipWebRequest;
 69414        private List<WebRequestAsyncOperation> ongoingWebRequests = new List<WebRequestAsyncOperation>();
 15
 16        public static WebRequestController Create()
 17        {
 69418            WebRequestController newWebRequestController = new WebRequestController();
 19
 69420            newWebRequestController.Initialize(
 21                genericWebRequest: new WebRequest(),
 22                assetBundleWebRequest: new WebRequestAssetBundle(),
 23                textureWebRequest: new WebRequestTexture(),
 24                audioClipWebRequest: new WebRequestAudio());
 25
 69426            return newWebRequestController;
 27        }
 28
 29        public void Initialize(
 30            IWebRequest genericWebRequest,
 31            IWebRequestAssetBundle assetBundleWebRequest,
 32            IWebRequest textureWebRequest,
 33            IWebRequestAudio audioClipWebRequest)
 34        {
 71835            this.genericWebRequest = genericWebRequest;
 71836            this.assetBundleWebRequest = assetBundleWebRequest;
 71837            this.textureWebRequest = textureWebRequest;
 71838            this.audioClipWebRequest = audioClipWebRequest;
 71839        }
 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        {
 17951            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        {
 13886            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        {
 2398            audioClipWebRequest.SetAudioType(audioType);
 2399            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            WebRequestAsyncOperation asyncOp = null
 113        ) where T : IWebRequest
 114        {
 359115            int remainingAttemps = Mathf.Clamp(requestAttemps, 1, requestAttemps);
 116
 359117            UnityWebRequest request = requestType.CreateWebRequest(url);
 359118            request.timeout = timeout;
 359119            if (headers != null)
 120            {
 0121                foreach (var item in headers)
 122                {
 0123                    request.SetRequestHeader(item.Key, item.Value);
 124                }
 125            }
 126
 359127            if (downloadHandler != null)
 162128                request.downloadHandler = downloadHandler;
 129
 359130            WebRequestAsyncOperation resultOp = asyncOp;
 131
 359132            if (resultOp == null)
 359133                resultOp = new WebRequestAsyncOperation(request);
 134            else
 0135                resultOp.SetNewWebRequest(request);
 136
 359137            resultOp.disposeOnCompleted = disposeOnCompleted;
 359138            ongoingWebRequests.Add(resultOp);
 139
 359140            UnityWebRequestAsyncOperation requestOp = resultOp.webRequest.SendWebRequest();
 359141            requestOp.completed += (asyncOp) =>
 142            {
 143                if (!resultOp.isDisposed)
 144                {
 145                    if (resultOp.webRequest.WebRequestSucceded())
 146                    {
 147                        OnSuccess?.Invoke(resultOp.webRequest);
 148                        resultOp.SetAsCompleted(true);
 149                    }
 150                    else if (!resultOp.webRequest.WebRequestAborted() && resultOp.webRequest.WebRequestServerError())
 151                    {
 152                        remainingAttemps--;
 153                        if (remainingAttemps > 0)
 154                        {
 155                            Debug.LogWarning($"Retrying web request: {url} ({remainingAttemps} attemps remaining)");
 156                            resultOp.Dispose();
 157                            resultOp = SendWebRequest(requestType, url, downloadHandler, OnSuccess, OnFail, remainingAtt
 158                        }
 159                        else
 160                        {
 161                            OnFail?.Invoke(resultOp.webRequest);
 162                            resultOp.SetAsCompleted(false);
 163                        }
 164                    }
 165                    else
 166                    {
 167                        OnFail?.Invoke(resultOp.webRequest);
 168                        resultOp.SetAsCompleted(false);
 169                    }
 170                }
 171
 172                ongoingWebRequests.Remove(resultOp);
 173            };
 174
 359175            return resultOp;
 176        }
 177
 178        public void Dispose()
 179        {
 1648180            foreach (var webRequest in ongoingWebRequests)
 181            {
 89182                webRequest.Dispose();
 183            }
 735184        }
 185    }
 186}