< 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:3
Coverable lines:41
Total lines:98
Line coverage:92.6% (38 of 41)
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%220100%
GetCachedExecutor(...)0%5.25080%
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<string, 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 string cachedSceneId;
 19    private ICRDTExecutor cachedCrdtExecutor;
 20
 621    public CrdtExecutorsManager(Dictionary<string, ICRDTExecutor> crdtExecutors,
 22        ECSComponentsManager componentsManager, ISceneController sceneController, IWorldState worldState,
 23        CRDTServiceContext rpcCrdtServiceContext)
 24    {
 625        this.crdtExecutors = crdtExecutors;
 626        this.sceneController = sceneController;
 627        this.worldState = worldState;
 628        this.componentsManager = componentsManager;
 629        this.rpcCrdtServiceContext = rpcCrdtServiceContext;
 30
 631        sceneController.OnSceneRemoved += OnSceneRemoved;
 632        rpcCrdtServiceContext.CrdtMessageReceived += CrdtMessageReceived;
 633    }
 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    {
 149        string sceneId = scene.sceneData.id;
 150        if (crdtExecutors.TryGetValue(sceneId, out ICRDTExecutor crdtExecutor))
 51        {
 152            crdtExecutor.Dispose();
 153            crdtExecutors.Remove(sceneId);
 54        }
 155    }
 56
 57    private ICRDTExecutor GetCachedExecutor(string sceneId)
 58    {
 459        if (cachedSceneId != sceneId)
 60        {
 361            cachedCrdtExecutor = null;
 362            cachedSceneId = null;
 363            if (crdtExecutors.TryGetValue(sceneId, out cachedCrdtExecutor))
 64            {
 065                cachedSceneId = sceneId;
 066            }
 367            else if (worldState.TryGetScene(sceneId, out IParcelScene scene))
 68            {
 269                cachedSceneId = sceneId;
 270                if (scene.crdtExecutor == null)
 71                {
 272                    cachedCrdtExecutor = new CRDTExecutor(scene, componentsManager);
 273                    scene.crdtExecutor = cachedCrdtExecutor;
 274                    crdtExecutors[sceneId] = cachedCrdtExecutor;
 275                }
 76                else
 77                {
 078                    cachedCrdtExecutor = scene.crdtExecutor;
 79                }
 80            }
 81        }
 482        return cachedCrdtExecutor;
 83    }
 84
 85    private void CrdtMessageReceived(string sceneId, CRDTMessage crdtMessage)
 86    {
 487        ICRDTExecutor executor = GetCachedExecutor(sceneId);
 88
 489        if (executor != null)
 90        {
 391            executor.Execute(crdtMessage);
 392        }
 93        else
 94        {
 195            Debug.LogError($"CrdtExecutor not found for sceneId {sceneId}");
 96        }
 197    }
 98}