< Summary

Class:MainScripts.DCL.Controllers.LoadingFlow.LoadingFlowController
Assembly:LoadingFlowController
File(s):/tmp/workspace/explorer-desktop/unity-renderer-desktop/Assets/Scripts/MainScripts/DCL/Controllers/LoadingFlow/LoadingFlowController.cs
Covered lines:0
Uncovered lines:43
Coverable lines:43
Total lines:111
Line coverage:0% (0 of 43)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
LoadingFlowController(...)0%2100%
CreateView()0%2100%
OnLoadingHudVisibleChanged(...)0%6200%
StartWatching()0%2100%
HandleFatalError(...)0%6200%
StopWatching()0%6200%
Update()0%12300%
IsTimeToShowTimeout()0%12300%
OnRendererStateChange(...)0%6200%
Dispose()0%2100%

File(s)

/tmp/workspace/explorer-desktop/unity-renderer-desktop/Assets/Scripts/MainScripts/DCL/Controllers/LoadingFlow/LoadingFlowController.cs

#LineLine coverage
 1using System;
 2using UnityEngine;
 3using Object = UnityEngine.Object;
 4
 5namespace MainScripts.DCL.Controllers.LoadingFlow
 6{
 7    public class LoadingFlowController : IDisposable
 8    {
 9        private const float GENERAL_TIMEOUT_IN_SECONDS = 100;
 10        private const int WEB_SOCKET_TIMEOUT = 15;
 11
 12        private readonly BaseVariable<Exception> fatalErrorMessage;
 13        private readonly ILoadingFlowView view;
 14        private readonly BaseVariable<bool> loadingHudVisible;
 15        private readonly RendererState rendererState;
 16        private readonly BaseVariable<bool> websocketCommunicationEstablished;
 17        private float timerStart;
 18        private bool isWatching;
 19
 020        public LoadingFlowController(BaseVariable<Exception> fatalErrorMessage,
 21            BaseVariable<bool> loadingHudVisible,
 22            RendererState rendererState,
 23            BaseVariable<bool> websocketCommunicationEstablished)
 24        {
 025            this.fatalErrorMessage = fatalErrorMessage;
 026            this.loadingHudVisible = loadingHudVisible;
 027            this.rendererState = rendererState;
 028            this.websocketCommunicationEstablished = websocketCommunicationEstablished;
 29
 030            view = CreateView();
 031            view.Hide();
 32
 033            this.loadingHudVisible.OnChange += OnLoadingHudVisibleChanged;
 034            this.rendererState.OnChange += OnRendererStateChange;
 035        }
 36
 37        private ILoadingFlowView CreateView()
 38        {
 039            return Object.Instantiate(Resources.Load<LoadingFlowView>("LoadingFlow"));
 40        }
 41
 42        private void OnLoadingHudVisibleChanged(bool current, bool previous)
 43        {
 044            if (current)
 45            {
 046                StartWatching();
 47            }
 48            else
 49            {
 050                view.Hide();
 051                StopWatching();
 52            }
 053        }
 54
 55        private void StartWatching()
 56        {
 057            isWatching = false;
 058            timerStart = Time.unscaledTime;
 059            fatalErrorMessage.OnChange += HandleFatalError;
 060        }
 61
 62        private void HandleFatalError(Exception current, Exception previous)
 63        {
 064            if (current == null) return;
 65
 066            view.Show();
 067            StopWatching();
 068        }
 69
 70        private void StopWatching()
 71        {
 072            if (isWatching) return;
 073            isWatching = true;
 074            fatalErrorMessage.OnChange -= HandleFatalError;
 075        }
 76
 77        public void Update()
 78        {
 079            if (isWatching) return;
 80
 081            if (IsTimeToShowTimeout())
 82            {
 083                view.Show();
 084                StopWatching();
 85            }
 086        }
 87
 88        private bool IsTimeToShowTimeout()
 89        {
 090            var elapsedLoadingTime = Time.unscaledTime - timerStart;
 091            return elapsedLoadingTime > GENERAL_TIMEOUT_IN_SECONDS
 92                   || !websocketCommunicationEstablished.Get() && elapsedLoadingTime > WEB_SOCKET_TIMEOUT;
 93        }
 94
 95        private void OnRendererStateChange(bool current, bool previous)
 96        {
 097            if (current)
 98            {
 099                view.Hide();
 0100                StopWatching();
 101            }
 0102        }
 103
 104        public void Dispose()
 105        {
 0106            fatalErrorMessage.OnChange -= HandleFatalError;
 0107            loadingHudVisible.OnChange -= OnLoadingHudVisibleChanged;
 0108            rendererState.OnChange -= OnRendererStateChange;
 0109        }
 110    }
 111}