< Summary

Class:DCL.MessagingController
Assembly:MainScripts
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/Scene/Messaging/MessagingController.cs
Covered lines:31
Uncovered lines:32
Coverable lines:63
Total lines:158
Line coverage:49.2% (31 of 63)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
MessagingController(...)0%110100%
AddMessageBus(...)0%110100%
StartBus(...)0%220100%
StopBus(...)0%6200%
Stop()0%220100%
Dispose()0%220100%
ForceEnqueue(...)0%110100%
Enqueue(...)0%1101000%
GetEntityIdAndClassIdFromTag(...)0%6200%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/Scene/Messaging/MessagingController.cs

#LineLine coverage
 1using DCL.Controllers;
 2using DCL.Models;
 3using System;
 4using System.Collections.Generic;
 5using UnityEngine;
 6using UnityEngine.Profiling;
 7
 8namespace DCL
 9{
 10    public class MessagingController : IDisposable
 11    {
 12        const char SEPARATOR = '_';
 13
 14        public enum QueueState
 15        {
 16            Init,
 17            Systems,
 18        }
 19
 65620        public Dictionary<MessagingBusType, MessagingBus> messagingBuses = new Dictionary<MessagingBusType, MessagingBus
 21        public IMessageProcessHandler messageHandler;
 22        public string debugTag;
 65623        public bool enabled = true;
 24
 25        private QueueState currentQueueState;
 26
 27        public readonly MessagingBus initBus;
 28        public readonly MessagingBus systemBus;
 29        public readonly MessagingBus uiBus;
 30
 31        public IMessagingControllersManager messagingManager;
 32
 65633        public MessagingController(IMessagingControllersManager messagingManager, IMessageProcessHandler messageHandler,
 34        {
 65635            this.messagingManager = messagingManager;
 65636            this.debugTag = debugTag;
 65637            this.messageHandler = messageHandler;
 38
 39            //TODO(Brian): This is too hacky, most of the controllers won't be using this system. Refactor this in the f
 65640            uiBus = AddMessageBus(MessagingBusType.UI);
 65641            initBus = AddMessageBus(MessagingBusType.INIT);
 65642            systemBus = AddMessageBus(MessagingBusType.SYSTEM);
 43
 65644            currentQueueState = QueueState.Init;
 45
 65646            StartBus(MessagingBusType.INIT);
 65647            StartBus(MessagingBusType.UI);
 65648        }
 49
 50        private MessagingBus AddMessageBus(MessagingBusType type)
 51        {
 196852            var newMessagingBus = new MessagingBus(type, messageHandler, this);
 196853            newMessagingBus.debugTag = debugTag;
 54
 196855            messagingBuses.Add(type, newMessagingBus);
 196856            return newMessagingBus;
 57        }
 58
 59        public void StartBus(MessagingBusType busType)
 60        {
 131261            if (messagingBuses.ContainsKey(busType))
 62            {
 131263                messagingBuses[busType].Start();
 64            }
 131265        }
 66
 67        public void StopBus(MessagingBusType busType)
 68        {
 069            if (messagingBuses.ContainsKey(busType))
 70            {
 071                messagingBuses[busType].Stop();
 72            }
 073        }
 74
 75        public void Stop()
 76        {
 128577            using (var iterator = messagingBuses.GetEnumerator())
 78            {
 514079                while (iterator.MoveNext())
 80                {
 385581                    iterator.Current.Value.Stop();
 82                }
 128583            }
 128584        }
 85
 86        public void Dispose()
 87        {
 65688            using (var iterator = messagingBuses.GetEnumerator())
 89            {
 262490                while (iterator.MoveNext())
 91                {
 196892                    iterator.Current.Value.Dispose();
 93                }
 65694            }
 65695        }
 96
 5497        public void ForceEnqueue(MessagingBusType busType, QueuedSceneMessage queuedMessage) { messagingBuses[busType].E
 98
 99        public void Enqueue(bool isUiBus, QueuedSceneMessage_Scene queuedMessage, out MessagingBusType busType)
 100        {
 0101            busType = MessagingBusType.NONE;
 102
 0103            QueueMode queueMode = QueueMode.Reliable;
 104
 105            // If current scene is the Global Scene, the bus id should be UI
 0106            if (isUiBus)
 0107                busType = MessagingBusType.UI;
 0108            else if (currentQueueState == QueueState.Init)
 0109                busType = MessagingBusType.INIT;
 110            else
 0111                busType = MessagingBusType.SYSTEM;
 112
 113            // Check if the message type is an EntityComponentCreateOrUpdate
 0114            if (queuedMessage.payload is Protocol.EntityComponentCreateOrUpdate)
 115            {
 116                // We need to extract the entityId and the classId from the tag.
 117                // The tag format is "entityId_classId", i.e: "E1_2".
 0118                GetEntityIdAndClassIdFromTag(queuedMessage.tag, out int classId);
 119
 120                // If it is a transform update, the queue mode is Lossy
 0121                if (classId == (int) CLASS_ID_COMPONENT.TRANSFORM)
 0122                    queueMode = QueueMode.Lossy;
 0123            }
 0124            else if (queuedMessage.payload is Protocol.QueryPayload)
 125            {
 0126                busType = MessagingBusType.UI;
 0127                queueMode = QueueMode.Lossy;
 0128            }
 0129            else if (queuedMessage.payload is Protocol.SceneReady)
 130            {
 131                // When a INIT DONE message is enqueued, the next messages should be
 132                // enqueued in SYSTEM message bus, but we don't process them until
 133                // scene started has been processed
 0134                currentQueueState = QueueState.Systems;
 135            }
 136
 0137            switch (busType)
 138            {
 139                case MessagingBusType.INIT:
 0140                    initBus.Enqueue(queuedMessage, queueMode);
 0141                    break;
 142                case MessagingBusType.SYSTEM:
 0143                    systemBus.Enqueue(queuedMessage, queueMode);
 0144                    break;
 145                case MessagingBusType.UI:
 0146                    uiBus.Enqueue(queuedMessage, queueMode);
 147                    break;
 148            }
 0149        }
 150
 151        private void GetEntityIdAndClassIdFromTag(string tag, out int classId)
 152        {
 0153            int lastSeparator = tag.LastIndexOf(SEPARATOR);
 0154            if (!int.TryParse(tag.Substring(lastSeparator + 1), out classId))
 0155                Debug.LogError("Couldn't parse classId string to int");
 0156        }
 157    }
 158}