< 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:27
Uncovered lines:17
Coverable lines:44
Total lines:144
Line coverage:61.3% (27 of 44)
Covered branches:0
Total branches:0
Covered methods:12
Total methods:16
Method coverage:75% (12 of 16)

Metrics

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

File(s)

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

#LineLine coverage
 1using DCL.Controllers;
 2using DCL.CRDT;
 3using DCL.Models;
 4using System;
 5using System.Collections.Generic;
 6using UnityEngine;
 7
 8namespace DCL.ECSRuntime
 9{
 10    public class ECSComponentWriter : IECSComponentWriter
 11    {
 12        private abstract class Serializer
 13        {
 14            private readonly Type targetType;
 15
 3816            protected Serializer(Type targetType)
 17            {
 3818                this.targetType = targetType;
 3819            }
 20
 21            public bool CheckType(Type expectedType) =>
 122                targetType == expectedType;
 23
 24            public abstract byte[] Serialize(object obj);
 25        }
 26
 27        private class Serializer<T> : Serializer
 28        {
 29            private readonly Func<T, byte[]> serialize;
 30
 31            public Serializer(Func<T, byte[]> serialize) : base(typeof(T))
 32            {
 33                this.serialize = serialize;
 34            }
 35
 36            public override byte[] Serialize(object obj) =>
 37                serialize((T)obj);
 38        }
 39
 40        public delegate void WriteComponent(int sceneNumber, long entityId, int componentId, byte[] data,
 41            int minTimeStamp, ECSComponentWriteType writeType, CrdtMessageType messageType);
 42
 343        private readonly Dictionary<int, Serializer> serializers = new ();
 44        private WriteComponent writeComponent;
 45
 246        public ECSComponentWriter(WriteComponent writeComponent)
 47        {
 248            this.writeComponent = writeComponent;
 249        }
 50
 251        public ECSComponentWriter() { }
 52
 53        public void AddOrReplaceComponentSerializer<T>(int componentId, Func<T, byte[]> serializer)
 54        {
 3855            serializers[componentId] = new Serializer<T>(serializer);
 3856        }
 57
 58        public void RemoveComponentSerializer(int componentId)
 59        {
 3660            serializers.Remove(componentId);
 3661        }
 62
 63        public void PutComponent<T>(IParcelScene scene, IDCLEntity entity, int componentId, T model, ECSComponentWriteTy
 64        {
 165            PutComponent(scene.sceneData.sceneNumber, entity.entityId, componentId, model, -1, writeType);
 166        }
 67
 68        public void PutComponent<T>(int sceneNumber, long entityId, int componentId, T model, ECSComponentWriteType writ
 69        {
 070            PutComponent(sceneNumber, entityId, componentId, model, -1, writeType);
 071        }
 72
 73        public void PutComponent<T>(int sceneNumber, long entityId, int componentId, T model, int minTimeStamp,
 74            ECSComponentWriteType writeType)
 75        {
 176            PutComponent(typeof(T), sceneNumber, entityId, componentId, model, minTimeStamp, writeType);
 177        }
 78
 79        public void PutComponent(Type componentType, int sceneNumber, long entityId, int componentId, object model,
 80            ECSComponentWriteType writeType)
 81        {
 082            PutComponent(componentType, sceneNumber, entityId, componentId, model, -1, writeType);
 083        }
 84
 85        public void PutComponent(Type componentType, int sceneNumber, long entityId, int componentId, object model,
 86            int minTimeStamp, ECSComponentWriteType writeType)
 87        {
 188            if (!serializers.TryGetValue(componentId, out Serializer serializer))
 89            {
 090                Debug.LogError($"Trying to write component but no serializer was found for {componentId}");
 091                return;
 92            }
 93
 194            if (serializer.CheckType(componentType))
 95            {
 196                writeComponent(sceneNumber, entityId, componentId, serializer.Serialize(model), minTimeStamp, writeType,
 97            }
 98            else
 99            {
 0100                Debug.LogError($"Trying to write component but serializer for {componentId} does not match {componentTyp
 101            }
 0102        }
 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, int minTimeStamp, ECSComponentWrite
 110        {
 1111            writeComponent(sceneNumber, entityId, componentId, null, minTimeStamp, writeType, CrdtMessageType.DELETE_COM
 1112        }
 113
 114        public void AppendComponent(Type componentType, int sceneNumber, long entityId, int componentId, object model,
 115            ECSComponentWriteType writeType)
 116        {
 0117            if (!serializers.TryGetValue(componentId, out Serializer serializer))
 118            {
 0119                Debug.LogError($"Trying to write an append component but no serializer was found for {componentId}");
 0120                return;
 121            }
 122
 0123            if (serializer.CheckType(componentType))
 124            {
 0125                writeComponent(sceneNumber, entityId, componentId, serializer.Serialize(model), -1, writeType, CrdtMessa
 126            }
 127            else
 128            {
 0129                Debug.LogError($"Trying to write component but serializer for {componentId} does not match {componentTyp
 130            }
 0131        }
 132
 133        public void AppendComponent<T>(int sceneNumber, long entityId, int componentId, T model, ECSComponentWriteType w
 134        {
 0135            AppendComponent(typeof(T), sceneNumber, entityId, componentId, model, writeType);
 0136        }
 137
 138        public void Dispose()
 139        {
 1140            serializers.Clear();
 1141            writeComponent = null;
 1142        }
 143    }
 144}