< Summary

Class:WorldsFeaturesAnalytics.WorldsAnalytics
Assembly:WorldsAnalytics
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Analytics/WorldsAnalytics/WorldsAnalytics.cs
Covered lines:27
Uncovered lines:0
Coverable lines:27
Total lines:82
Line coverage:100% (27 of 27)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
WorldsAnalytics(...)0%110100%
Initialize()0%110100%
Dispose()0%220100%
OnEnteredRealm(...)0%770100%
SendPlayerEnteredWorld(...)0%110100%
SendPlayerLeavesWorld(...)0%110100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Analytics/WorldsAnalytics/WorldsAnalytics.cs

#LineLine coverage
 1using DCL;
 2using DCLPlugins.RealmPlugin;
 3using System.Collections.Generic;
 4using UnityEngine;
 5using static Decentraland.Bff.AboutResponse.Types;
 6
 7namespace WorldsFeaturesAnalytics
 8{
 9    public class WorldsAnalytics : IWorldsAnalytics
 10    {
 11        internal const string ENTERED_WORLD = "user_entered_world";
 12        internal const string EXIT_WORLD = "user_exit_world";
 13
 14        private readonly DataStore_Common commonDataStore;
 15        private readonly DataStore_Realm realmDataStore;
 16
 17        private readonly IAnalytics analytics;
 18        private bool currentlyInWorld;
 19        private string currentWorldName;
 20        private double lastRealmEnteredTime;
 21        private bool firstRealmEntered;
 22
 49523        public WorldsAnalytics(DataStore_Common commonDataStore, DataStore_Realm realmDataStore, IAnalytics analytics)
 24        {
 49525            this.commonDataStore = commonDataStore;
 49526            this.analytics = analytics;
 49527            this.realmDataStore = realmDataStore;
 28
 49529            realmDataStore.playerRealmAboutConfiguration.OnChange += OnEnteredRealm;
 49530        }
 31
 49332        public void Initialize() { }
 33
 34        public void Dispose()
 35        {
 49536            if (currentlyInWorld)
 137                SendPlayerLeavesWorld(currentWorldName, Time.realtimeSinceStartup - lastRealmEnteredTime, ExitType.Appli
 38
 49539            realmDataStore.playerRealmAboutConfiguration.OnChange -= OnEnteredRealm;
 49540        }
 41
 42        private void OnEnteredRealm(AboutConfiguration current, AboutConfiguration previous)
 43        {
 344            if (currentlyInWorld)
 145                SendPlayerLeavesWorld(currentWorldName, Time.realtimeSinceStartup - lastRealmEnteredTime, commonDataStor
 46
 347            if (current.IsWorld())
 48            {
 249                currentWorldName = current.RealmName;
 250                SendPlayerEnteredWorld(currentWorldName, firstRealmEntered ? AccessType.Chat : AccessType.URL);
 51            }
 52
 353            currentlyInWorld = current.IsWorld();
 354            lastRealmEnteredTime = Time.realtimeSinceStartup;
 355            firstRealmEntered = true;
 356            commonDataStore.exitedWorldThroughGoBackButton.Set(false);
 357        }
 58
 59        private void SendPlayerEnteredWorld(string worldName, AccessType accessType)
 60        {
 261            var data = new Dictionary<string, string>
 62            {
 63                { "worldName", worldName },
 64                { "accessType", accessType.ToString() },
 65            };
 66
 267            analytics.SendAnalytic(ENTERED_WORLD, data);
 268        }
 69
 70        private void SendPlayerLeavesWorld(string worldName, double sessionTimeInSeconds, ExitType exitType)
 71        {
 272            var data = new Dictionary<string, string>
 73            {
 74                { "worldName", worldName },
 75                { "sessionTime", sessionTimeInSeconds.ToString() },
 76                { "exitType", exitType.ToString() },
 77            };
 78
 279            analytics.SendAnalytic(EXIT_WORLD, data);
 280        }
 81    }
 82}