< Summary

Class:DCL.ServerTime.WorldTimer
Assembly:TimeController
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Rendering/ProceduralSkybox/World Timer/WorldTimer.cs
Covered lines:0
Uncovered lines:24
Coverable lines:24
Total lines:88
Line coverage:0% (0 of 24)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
WorldTimer()0%2100%
GetTimeFromServer()0%2100%
WebRequestCompleted(...)0%12300%
UpdateTimeWithServerTime(...)0%12300%
GetCurrentTime()0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Rendering/ProceduralSkybox/World Timer/WorldTimer.cs

#LineLine coverage
 1using System.Collections;
 2using System.Collections.Generic;
 3using UnityEngine;
 4using System;
 5using UnityEngine.Networking;
 6
 7namespace DCL.ServerTime
 8{
 9    public class WorldTimer
 10    {
 11        public delegate void OnTimeUpdated(DateTime serverTime);
 12        public event OnTimeUpdated OnTimeChanged;
 13
 14        public float serverHitFrequency;
 015        public string serverURL = "https://peer.decentraland.org/lambdas/health";
 16
 17        private bool initialized = false;
 018        private DateTime lastTimeFromServer = DateTime.Now.ToUniversalTime();
 019        private DateTime lastTimeFromSystem = DateTime.Now;
 20        private TimeSpan timeOffset;
 21        private bool stopTimer = false;
 22        UnityWebRequest webRequest;
 23
 024        public WorldTimer() { GetTimeFromServer(); }
 25
 26        void GetTimeFromServer()
 27        {
 28            try
 29            {
 030                webRequest = UnityWebRequest.Get(serverURL);
 031                UnityWebRequestAsyncOperation temp = webRequest.SendWebRequest();
 032                temp.completed += WebRequestCompleted;
 033            }
 34            catch (Exception e)
 35            {
 036                Debug.LogException(e);
 037            }
 038        }
 39
 40        private void WebRequestCompleted(AsyncOperation obj)
 41        {
 042            switch (webRequest.result)
 43            {
 44                case UnityWebRequest.Result.InProgress:
 45                    break;
 46                case UnityWebRequest.Result.Success:
 047                    string responseHeaderTime = webRequest.GetResponseHeader("date");
 048                    UpdateTimeWithServerTime(responseHeaderTime);
 049                    initialized = true;
 50
 51                    break;
 52                case UnityWebRequest.Result.ConnectionError:
 53                    break;
 54                case UnityWebRequest.Result.ProtocolError:
 55                    break;
 56                case UnityWebRequest.Result.DataProcessingError:
 57                    break;
 58                default:
 59                    break;
 60            }
 61
 062            webRequest.Dispose();
 063        }
 64
 65        void UpdateTimeWithServerTime(string datetime)
 66        {
 67            DateTime serverTime;
 68
 069            if (DateTime.TryParse(datetime, out serverTime))
 70            {
 71                // Update last server time
 072                lastTimeFromServer = serverTime.ToUniversalTime();
 73                // Update current time from the system
 074                lastTimeFromSystem = DateTime.Now;
 75
 76                // Fire Event
 077                OnTimeChanged?.Invoke(lastTimeFromServer);
 78            }
 079        }
 80
 81        public DateTime GetCurrentTime()
 82        {
 083            TimeSpan systemTimeOffset = DateTime.Now - lastTimeFromSystem;
 84
 085            return lastTimeFromServer.ToUniversalTime().Add(systemTimeOffset);
 86        }
 87    }
 88}