< Summary

Class:CrdtExecutorsManager
Assembly:ECS7Plugin.CrdtExecutorsManager
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/CrdtExecutorsManager/CrdtExecutorsManager.cs
Covered lines:39
Uncovered lines:1
Coverable lines:40
Total lines:105
Line coverage:97.5% (39 of 40)
Covered branches:0
Total branches:0
Covered methods:6
Total methods:6
Method coverage:100% (6 of 6)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
CrdtExecutorsManager(...)0%110100%
Dispose()0%220100%
OnSceneRemoved(...)0%3.033085.71%
OnSceneAdded(...)0%220100%
GetCachedExecutor(...)0%330100%
CrdtMessageReceived(...)0%220100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/CrdtExecutorsManager/CrdtExecutorsManager.cs

#LineLine coverage
 1using DCL;
 2using DCL.Controllers;
 3using DCL.CRDT;
 4using DCL.ECSRuntime;
 5using RPC.Context;
 6using System;
 7using System.Collections.Generic;
 8using UnityEngine;
 9
 10public class CrdtExecutorsManager : IDisposable
 11{
 12    private readonly Dictionary<int, ICRDTExecutor> crdtExecutors;
 13    private readonly ISceneController sceneController;
 14    private readonly ECSComponentsManager componentsManager;
 15    private readonly CRDTServiceContext rpcCrdtServiceContext;
 16
 17    private int cachedSceneNumber;
 18    private ICRDTExecutor cachedCrdtExecutor;
 19
 1020    public CrdtExecutorsManager(Dictionary<int, ICRDTExecutor> crdtExecutors,
 21        ECSComponentsManager componentsManager, ISceneController sceneController,
 22        CRDTServiceContext rpcCrdtServiceContext)
 23    {
 1024        this.crdtExecutors = crdtExecutors;
 1025        this.sceneController = sceneController;
 1026        this.componentsManager = componentsManager;
 1027        this.rpcCrdtServiceContext = rpcCrdtServiceContext;
 28
 1029        sceneController.OnSceneRemoved += OnSceneRemoved;
 1030        sceneController.OnNewSceneAdded += OnSceneAdded;
 1031        rpcCrdtServiceContext.CrdtMessageReceived += CrdtMessageReceived;
 1032    }
 33
 34    public void Dispose()
 35    {
 536        sceneController.OnSceneRemoved -= OnSceneRemoved;
 537        sceneController.OnNewSceneAdded -= OnSceneAdded;
 538        rpcCrdtServiceContext.CrdtMessageReceived -= CrdtMessageReceived;
 39
 2040        foreach (ICRDTExecutor crdtExecutor in crdtExecutors.Values)
 41        {
 542            crdtExecutor.Dispose();
 43        }
 44
 545        crdtExecutors.Clear();
 546    }
 47
 48    private void OnSceneRemoved(IParcelScene scene)
 49    {
 350        int sceneNumber = scene.sceneData.sceneNumber;
 51
 352        if (crdtExecutors.TryGetValue(sceneNumber, out ICRDTExecutor crdtExecutor))
 53        {
 254            crdtExecutor.Dispose();
 255            crdtExecutors.Remove(sceneNumber);
 56        }
 57
 358        if (cachedSceneNumber == sceneNumber)
 59        {
 060            cachedSceneNumber = -1;
 61        }
 362    }
 63
 64    private void OnSceneAdded(IParcelScene scene)
 65    {
 566        if (!scene.sceneData.sdk7)
 167            return;
 68
 469        CRDTExecutor executor = new CRDTExecutor(scene, componentsManager);
 470        executor.GenerateInitialEntities();
 471        crdtExecutors[scene.sceneData.sceneNumber] = executor;
 472    }
 73
 74    private ICRDTExecutor GetCachedExecutor(int sceneNumber)
 75    {
 676        if (cachedSceneNumber != sceneNumber)
 77        {
 578            cachedCrdtExecutor = null;
 579            cachedSceneNumber = -1;
 80
 581            if (crdtExecutors.TryGetValue(sceneNumber, out cachedCrdtExecutor))
 82            {
 483                cachedSceneNumber = sceneNumber;
 84            }
 85        }
 86
 687        return cachedCrdtExecutor;
 88    }
 89
 90    private void CrdtMessageReceived(int sceneNumber, CrdtMessage crdtMessage)
 91    {
 692        ICRDTExecutor executor = GetCachedExecutor(sceneNumber);
 93
 694        if (executor != null)
 95        {
 596            executor.Execute(crdtMessage);
 97        }
 98#if UNITY_EDITOR
 99        else
 100        {
 1101            Debug.LogError($"CrdtExecutor not found for sceneNumber {sceneNumber}");
 102        }
 103#endif
 1104    }
 105}