< Summary

Class:CrdtExecutorsManager
Assembly:ECS7Plugin.CrdtExecutorsManager
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/DCLPlugins/ECS7/CrdtExecutorsManager/CrdtExecutorsManager.cs
Covered lines:38
Uncovered lines:2
Coverable lines:40
Total lines:103
Line coverage:95% (38 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%
GetCachedExecutor(...)0%5.095084.62%
CrdtMessageReceived(...)0%220100%

File(s)

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

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using DCL;
 4using DCL.Controllers;
 5using DCL.CRDT;
 6using DCL.ECSRuntime;
 7using RPC.Context;
 8using UnityEngine;
 9
 10public class CrdtExecutorsManager : IDisposable
 11{
 12    private readonly Dictionary<int, ICRDTExecutor> crdtExecutors;
 13    private readonly ISceneController sceneController;
 14    private readonly IWorldState worldState;
 15    private readonly ECSComponentsManager componentsManager;
 16    private readonly CRDTServiceContext rpcCrdtServiceContext;
 17
 18    private int cachedSceneNumber;
 19    private ICRDTExecutor cachedCrdtExecutor;
 20
 721    public CrdtExecutorsManager(Dictionary<int, ICRDTExecutor> crdtExecutors,
 22        ECSComponentsManager componentsManager, ISceneController sceneController, IWorldState worldState,
 23        CRDTServiceContext rpcCrdtServiceContext)
 24    {
 725        this.crdtExecutors = crdtExecutors;
 726        this.sceneController = sceneController;
 727        this.worldState = worldState;
 728        this.componentsManager = componentsManager;
 729        this.rpcCrdtServiceContext = rpcCrdtServiceContext;
 30
 731        sceneController.OnSceneRemoved += OnSceneRemoved;
 732        rpcCrdtServiceContext.CrdtMessageReceived += CrdtMessageReceived;
 733    }
 34
 35    public void Dispose()
 36    {
 237        sceneController.OnSceneRemoved -= OnSceneRemoved;
 238        rpcCrdtServiceContext.CrdtMessageReceived -= CrdtMessageReceived;
 39
 1040        foreach (ICRDTExecutor crdtExecutor in crdtExecutors.Values)
 41        {
 342            crdtExecutor.Dispose();
 43        }
 244        crdtExecutors.Clear();
 245    }
 46
 47    private void OnSceneRemoved(IParcelScene scene)
 48    {
 349        int sceneNumber = scene.sceneData.sceneNumber;
 350        if (crdtExecutors.TryGetValue(sceneNumber, out ICRDTExecutor crdtExecutor))
 51        {
 352            crdtExecutor.Dispose();
 353            crdtExecutors.Remove(sceneNumber);
 54        }
 55
 356        if (cachedSceneNumber == sceneNumber)
 57        {
 258            cachedSceneNumber = -1;
 59        }
 360    }
 61
 62    private ICRDTExecutor GetCachedExecutor(int sceneNumber)
 63    {
 664        if (cachedSceneNumber != sceneNumber)
 65        {
 566            cachedCrdtExecutor = null;
 567            cachedSceneNumber = -1;
 568            if (crdtExecutors.TryGetValue(sceneNumber, out cachedCrdtExecutor))
 69            {
 070                cachedSceneNumber = sceneNumber;
 71            }
 572            else if (worldState.TryGetScene(sceneNumber, out IParcelScene scene))
 73            {
 474                cachedSceneNumber = sceneNumber;
 475                if (scene.crdtExecutor == null)
 76                {
 477                    cachedCrdtExecutor = new CRDTExecutor(scene, componentsManager);
 478                    scene.crdtExecutor = cachedCrdtExecutor;
 479                    crdtExecutors[sceneNumber] = cachedCrdtExecutor;
 80                }
 81                else
 82                {
 083                    cachedCrdtExecutor = scene.crdtExecutor;
 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        else
 99        {
 1100            Debug.LogError($"CrdtExecutor not found for sceneNumber {sceneNumber}");
 101        }
 1102    }
 103}