< Summary

Class:RealmTrackerController
Assembly:ExploreV2
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/ExploreV2/Scripts/Common/Friends/RealmTrackerController.cs
Covered lines:18
Uncovered lines:57
Coverable lines:75
Total lines:178
Line coverage:24% (18 of 75)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
RealmTrackerController(...)0%5.935066.67%
Dispose()0%6200%
AddHandler(...)0%4.374071.43%
RemoveHandler(...)0%6200%
RemoveAllHandlers()0%2.022083.33%
OnUpdateUserStatus(...)0%42600%
OnFriendsInitialized()0%12300%
ProcessFriendRealm(...)0%20400%
ProcessNewListener(...)0%42600%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/ExploreV2/Scripts/Common/Friends/RealmTrackerController.cs

#LineLine coverage
 1using DCL.Social.Friends;
 2using System;
 3using System.Collections.Generic;
 4using UnityEngine;
 5using Random = UnityEngine.Random;
 6
 7public class RealmTrackerController : IDisposable
 8{
 129    Dictionary<IRealmTrackerHandler, TrackedRealmInfo> listeners = new Dictionary<IRealmTrackerHandler, TrackedRealmInfo
 1210    Dictionary<string, RealmTracker> friends = new Dictionary<string, RealmTracker>();
 11
 12    IFriendsController friendsController;
 13    Color[] friendColors;
 14
 1215    public RealmTrackerController(IFriendsController friendsController, Color[] friendColors)
 16    {
 1217        this.friendsController = friendsController;
 18
 1219        if (friendColors != null && friendColors.Length > 0)
 20        {
 1221            this.friendColors = friendColors;
 22        }
 23        else
 24        {
 025            this.friendColors = new Color[] { Color.white };
 26        }
 27
 1228        if (friendsController != null)
 29        {
 030            if (!friendsController.IsInitialized)
 31            {
 032                friendsController.OnInitialized += OnFriendsInitialized;
 33            }
 34
 035            friendsController.OnUpdateUserStatus += OnUpdateUserStatus;
 36        }
 1237    }
 38
 39    public void Dispose()
 40    {
 041        if (friendsController != null)
 42        {
 043            friendsController.OnInitialized -= OnFriendsInitialized;
 044            friendsController.OnUpdateUserStatus -= OnUpdateUserStatus;
 45        }
 046        listeners.Clear();
 047        friends.Clear();
 048    }
 49
 50    public void AddHandler(IRealmTrackerHandler listener)
 51    {
 52        TrackedRealmInfo wrapper;
 253        if (listeners.TryGetValue(listener, out wrapper))
 54        {
 055            return;
 56        }
 57
 258        wrapper = new TrackedRealmInfo(listener);
 59
 260        if (friendsController != null && friendsController.IsInitialized)
 61        {
 062            ProcessNewListener(wrapper);
 63        }
 64
 265        listeners.Add(listener, wrapper);
 266    }
 67
 68    public void RemoveHandler(IRealmTrackerHandler listener)
 69    {
 70        TrackedRealmInfo wrapper;
 071        if (listeners.TryGetValue(listener, out wrapper))
 72        {
 073            wrapper.Dispose();
 074            listeners.Remove(listener);
 75        }
 076    }
 77
 78    public void RemoveAllHandlers()
 79    {
 180        using (var listenersIterator = listeners.GetEnumerator())
 81        {
 182            while (listenersIterator.MoveNext())
 83            {
 084                listenersIterator.Current.Value.Dispose();
 85            }
 186        }
 87
 188        listeners.Clear();
 189    }
 90
 91    void OnUpdateUserStatus(string userId, UserStatus status)
 92    {
 093        if (!friendsController.IsInitialized)
 094            return;
 95
 96        RealmTracker friend;
 097        if (!friends.TryGetValue(userId, out friend))
 98        {
 099            friend = new RealmTracker(userId, friendColors[Random.Range(0, friendColors.Length)]);
 0100            friends.Add(userId, friend);
 101        }
 102
 0103        friend.SetStatus(status);
 104
 0105        if (!friend.IsOnline())
 106        {
 0107            friend.RemoveAllListeners();
 108        }
 109        else
 110        {
 0111            ProcessFriendRealm(friend, status.realm?.serverName);
 112        }
 0113    }
 114
 115    void OnFriendsInitialized()
 116    {
 0117        friendsController.OnInitialized -= OnFriendsInitialized;
 118
 0119        using (var friendsIterator = friendsController.GetAllocatedFriends().GetEnumerator())
 120        {
 0121            while (friendsIterator.MoveNext())
 122            {
 0123                RealmTracker friend = new RealmTracker(friendsIterator.Current.Key, friendColors[Random.Range(0, friendC
 0124                friend.SetStatus(friendsIterator.Current.Value);
 0125                friends.Add(friendsIterator.Current.Key, friend);
 126            }
 0127        }
 128
 0129        using (var listenersIterator = listeners.GetEnumerator())
 130        {
 0131            while (listenersIterator.MoveNext())
 132            {
 0133                ProcessNewListener(listenersIterator.Current.Value);
 134            }
 0135        }
 0136    }
 137
 138    void ProcessFriendRealm(RealmTracker friend, string serverName)
 139    {
 0140        if (!friend.HasChangedRealm(serverName))
 0141            return;
 142
 0143        friend.RemoveAllListeners();
 144
 0145        using (var listenersIterator = listeners.GetEnumerator())
 146        {
 0147            while (listenersIterator.MoveNext())
 148            {
 0149                if (listenersIterator.Current.Value.ContainRealm(serverName))
 150                {
 0151                    friend.AddListener(listenersIterator.Current.Value);
 152                }
 153            }
 0154        }
 0155    }
 156
 157    void ProcessNewListener(TrackedRealmInfo listener)
 158    {
 0159        string friendRealm = string.Empty;
 0160        using (var friendIterator = friends.GetEnumerator())
 161        {
 0162            while (friendIterator.MoveNext())
 163            {
 0164                if (!friendIterator.Current.Value.IsOnline())
 165                {
 166                    continue;
 167                }
 168
 0169                friendRealm = friendIterator.Current.Value.status.realm?.serverName;
 170
 0171                if (listener.ContainRealm(friendRealm))
 172                {
 0173                    friendIterator.Current.Value.AddListener(listener);
 174                }
 175            }
 0176        }
 0177    }
 178}