< Summary

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

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
CrdtExecutorsManager(...)0%110100%
Dispose()0%220100%
OnSceneRemoved(...)0%330100%
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    {
 450        int sceneNumber = scene.sceneData.sceneNumber;
 51
 452        if (crdtExecutors.TryGetValue(sceneNumber, out ICRDTExecutor crdtExecutor))
 53        {
 354            crdtExecutor.Dispose();
 355            crdtExecutors.Remove(sceneNumber);
 56        }
 57
 458        if (cachedSceneNumber == sceneNumber)
 59        {
 160            cachedSceneNumber = -1;
 61        }
 462    }
 63
 64    private void OnSceneAdded(IParcelScene scene)
 65    {
 566        if (!scene.sceneData.sdk7)
 167            return;
 68
 469        ICRDTExecutor executor = new CRDTExecutor(scene, componentsManager);
 470        scene.crdtExecutor = executor;
 471        crdtExecutors[scene.sceneData.sceneNumber] = executor;
 472    }
 73
 74    private ICRDTExecutor GetCachedExecutor(int sceneNumber)
 75    {
 776        if (cachedSceneNumber != sceneNumber)
 77        {
 678            cachedCrdtExecutor = null;
 679            cachedSceneNumber = -1;
 80
 681            if (crdtExecutors.TryGetValue(sceneNumber, out cachedCrdtExecutor))
 82            {
 583                cachedSceneNumber = sceneNumber;
 84            }
 85        }
 86
 787        return cachedCrdtExecutor;
 88    }
 89
 90    private void CrdtMessageReceived(int sceneNumber, CRDTMessage crdtMessage)
 91    {
 792        ICRDTExecutor executor = GetCachedExecutor(sceneNumber);
 93
 794        if (executor != null)
 95        {
 696            executor.Execute(crdtMessage);
 97        }
 98        else
 99        {
 1100            Debug.LogError($"CrdtExecutor not found for sceneNumber {sceneNumber}");
 101        }
 1102    }
 103}