< Summary

Class:DCL.ECSRuntime.ECSComponentWriter
Assembly:DCL.ECSRuntime.ComponentWriter
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/WorldRuntime/ECSRuntime/ComponentWriter/ECSComponentWriter.cs
Covered lines:30
Uncovered lines:6
Coverable lines:36
Total lines:120
Line coverage:83.3% (30 of 36)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Serializer(...)0%110100%
CheckType(...)0%110100%
ECSComponentWriter(...)0%110100%
AddOrReplaceComponentSerializer[T](...)0%110100%
RemoveComponentSerializer(...)0%110100%
PutComponent[T](...)0%110100%
PutComponent[T](...)0%110100%
PutComponent[T](...)0%110100%
PutComponent(...)0%2100%
PutComponent(...)0%4.683042.86%
RemoveComponent(...)0%110100%
RemoveComponent(...)0%110100%
RemoveComponent(...)0%110100%
Dispose()0%110100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/WorldRuntime/ECSRuntime/ComponentWriter/ECSComponentWriter.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using DCL.Controllers;
 4using DCL.Models;
 5using UnityEngine;
 6
 7namespace DCL.ECSRuntime
 8{
 9    public class ECSComponentWriter : IECSComponentWriter
 10    {
 11        private abstract class Serializer
 12        {
 13            private readonly Type targetType;
 14
 6215            protected Serializer(Type targetType)
 16            {
 6217                this.targetType = targetType;
 6218            }
 19
 20            public bool CheckType(Type expectedType) =>
 2521                targetType == expectedType;
 22
 23            public abstract byte[] Serialize(object obj);
 24        }
 25
 26        private class Serializer<T> : Serializer
 27        {
 28            private readonly Func<T, byte[]> serialize;
 29
 30            public Serializer(Func<T, byte[]> serialize) : base(typeof(T))
 31            {
 32                this.serialize = serialize;
 33            }
 34
 35            public override byte[] Serialize(object obj) =>
 36                serialize((T)obj);
 37        }
 38
 39        public delegate void WriteComponent(int sceneNumber, long entityId, int componentId, byte[] data,
 40            long minTimeStamp, ECSComponentWriteType writeType);
 41
 442        private readonly Dictionary<int, Serializer> serializers = new ();
 43        private WriteComponent writeComponent;
 44
 445        public ECSComponentWriter(WriteComponent writeComponent)
 46        {
 447            this.writeComponent = writeComponent;
 448        }
 49
 50        public void AddOrReplaceComponentSerializer<T>(int componentId, Func<T, byte[]> serializer)
 51        {
 6252            serializers[componentId] = new Serializer<T>(serializer);
 6253        }
 54
 55        public void RemoveComponentSerializer(int componentId)
 56        {
 6057            serializers.Remove(componentId);
 6058        }
 59
 60        public void PutComponent<T>(IParcelScene scene, IDCLEntity entity, int componentId, T model, ECSComponentWriteTy
 61        {
 162            PutComponent(scene.sceneData.sceneNumber, entity.entityId, componentId, model, -1, writeType);
 163        }
 64
 65        public void PutComponent<T>(int sceneNumber, long entityId, int componentId, T model, ECSComponentWriteType writ
 66        {
 2267            PutComponent(sceneNumber, entityId, componentId, model, -1, writeType);
 2268        }
 69
 70        public void PutComponent<T>(int sceneNumber, long entityId, int componentId, T model, long minTimeStamp, ECSComp
 71        {
 2572            PutComponent(typeof(T), sceneNumber, entityId, componentId, model, minTimeStamp, writeType);
 2573        }
 74
 75        public void PutComponent(Type componentType, int sceneNumber, long entityId, int componentId, object model, ECSC
 76        {
 077            PutComponent(componentType, sceneNumber, entityId, componentId, model, -1, writeType);
 078        }
 79
 80        public void PutComponent(Type componentType, int sceneNumber, long entityId, int componentId, object model,
 81            long minTimeStamp, ECSComponentWriteType writeType)
 82        {
 2583            if (!serializers.TryGetValue(componentId, out Serializer serializer))
 84            {
 085                Debug.LogError($"Trying to write component but no serializer was found for {componentId}");
 086                return;
 87            }
 88
 2589            if (serializer.CheckType(componentType))
 90            {
 2591                writeComponent(sceneNumber, entityId, componentId, serializer.Serialize(model), minTimeStamp, writeType)
 92            }
 93            else
 94            {
 095                Debug.LogError($"Trying to write component but serializer for {componentId} does not match {componentTyp
 96            }
 097        }
 98
 99        public void RemoveComponent(IParcelScene scene, IDCLEntity entity, int componentId, ECSComponentWriteType writeT
 100        {
 1101            RemoveComponent(scene.sceneData.sceneNumber, entity.entityId, componentId, writeType);
 1102        }
 103
 104        public void RemoveComponent(int sceneNumber, long entityId, int componentId, ECSComponentWriteType writeType)
 105        {
 1106            RemoveComponent(sceneNumber, entityId, componentId, -1, writeType);
 1107        }
 108
 109        public void RemoveComponent(int sceneNumber, long entityId, int componentId, long minTimeStamp, ECSComponentWrit
 110        {
 1111            writeComponent(sceneNumber, entityId, componentId, null, minTimeStamp, writeType);
 1112        }
 113
 114        public void Dispose()
 115        {
 2116            serializers.Clear();
 2117            writeComponent = null;
 2118        }
 119    }
 120}