< Summary

Class:DCL.ECSRuntime.ECSComponentWriterSerializer[T]
Assembly:DCL.ECSRuntime.ComponentWriter
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/WorldRuntime/ECSRuntime/ComponentWriter/ECSComponentWriter.cs
Covered lines:4
Uncovered lines:0
Coverable lines:4
Total lines:120
Line coverage:100% (4 of 4)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Serializer(...)0%110100%
Serialize(...)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
 15            protected Serializer(Type targetType)
 16            {
 17                this.targetType = targetType;
 18            }
 19
 20            public bool CheckType(Type expectedType) =>
 21                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
 6230            public Serializer(Func<T, byte[]> serialize) : base(typeof(T))
 31            {
 6232                this.serialize = serialize;
 6233            }
 34
 35            public override byte[] Serialize(object obj) =>
 2536                serialize((T)obj);
 37        }
 38
 39        public delegate void WriteComponent(int sceneNumber, long entityId, int componentId, byte[] data,
 40            long minTimeStamp, ECSComponentWriteType writeType);
 41
 42        private readonly Dictionary<int, Serializer> serializers = new ();
 43        private WriteComponent writeComponent;
 44
 45        public ECSComponentWriter(WriteComponent writeComponent)
 46        {
 47            this.writeComponent = writeComponent;
 48        }
 49
 50        public void AddOrReplaceComponentSerializer<T>(int componentId, Func<T, byte[]> serializer)
 51        {
 52            serializers[componentId] = new Serializer<T>(serializer);
 53        }
 54
 55        public void RemoveComponentSerializer(int componentId)
 56        {
 57            serializers.Remove(componentId);
 58        }
 59
 60        public void PutComponent<T>(IParcelScene scene, IDCLEntity entity, int componentId, T model, ECSComponentWriteTy
 61        {
 62            PutComponent(scene.sceneData.sceneNumber, entity.entityId, componentId, model, -1, writeType);
 63        }
 64
 65        public void PutComponent<T>(int sceneNumber, long entityId, int componentId, T model, ECSComponentWriteType writ
 66        {
 67            PutComponent(sceneNumber, entityId, componentId, model, -1, writeType);
 68        }
 69
 70        public void PutComponent<T>(int sceneNumber, long entityId, int componentId, T model, long minTimeStamp, ECSComp
 71        {
 72            PutComponent(typeof(T), sceneNumber, entityId, componentId, model, minTimeStamp, writeType);
 73        }
 74
 75        public void PutComponent(Type componentType, int sceneNumber, long entityId, int componentId, object model, ECSC
 76        {
 77            PutComponent(componentType, sceneNumber, entityId, componentId, model, -1, writeType);
 78        }
 79
 80        public void PutComponent(Type componentType, int sceneNumber, long entityId, int componentId, object model,
 81            long minTimeStamp, ECSComponentWriteType writeType)
 82        {
 83            if (!serializers.TryGetValue(componentId, out Serializer serializer))
 84            {
 85                Debug.LogError($"Trying to write component but no serializer was found for {componentId}");
 86                return;
 87            }
 88
 89            if (serializer.CheckType(componentType))
 90            {
 91                writeComponent(sceneNumber, entityId, componentId, serializer.Serialize(model), minTimeStamp, writeType)
 92            }
 93            else
 94            {
 95                Debug.LogError($"Trying to write component but serializer for {componentId} does not match {componentTyp
 96            }
 97        }
 98
 99        public void RemoveComponent(IParcelScene scene, IDCLEntity entity, int componentId, ECSComponentWriteType writeT
 100        {
 101            RemoveComponent(scene.sceneData.sceneNumber, entity.entityId, componentId, writeType);
 102        }
 103
 104        public void RemoveComponent(int sceneNumber, long entityId, int componentId, ECSComponentWriteType writeType)
 105        {
 106            RemoveComponent(sceneNumber, entityId, componentId, -1, writeType);
 107        }
 108
 109        public void RemoveComponent(int sceneNumber, long entityId, int componentId, long minTimeStamp, ECSComponentWrit
 110        {
 111            writeComponent(sceneNumber, entityId, componentId, null, minTimeStamp, writeType);
 112        }
 113
 114        public void Dispose()
 115        {
 116            serializers.Clear();
 117            writeComponent = null;
 118        }
 119    }
 120}