< Summary

Class:DCL.Social.Chat.PoolChatEntryFactory
Assembly:ChatHUD
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/ChatWidgetHUD/PoolChatEntryFactory.cs
Covered lines:23
Uncovered lines:6
Coverable lines:29
Total lines:77
Line coverage:79.3% (23 of 29)
Covered branches:0
Total branches:0
Covered methods:4
Total methods:5
Method coverage:80% (4 of 5)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
PoolChatEntryFactory()0%110100%
Create(...)0%8.238084.62%
Destroy(...)0%6200%
GetEntryFromPool(...)0%110100%
GetPool(...)0%220100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/HUD/ChatWidgetHUD/PoolChatEntryFactory.cs

#LineLine coverage
 1using System.Collections.Generic;
 2using DCL.Interface;
 3using UnityEngine;
 4
 5namespace DCL.Social.Chat
 6{
 7    [CreateAssetMenu(fileName = "PoolChatEntryFactory", menuName = "DCL/Social/PoolChatEntryFactory")]
 8    public class PoolChatEntryFactory : ScriptableObject, IChatEntryFactory
 9    {
 10        private const string POOL_NAME_PREFIX = "ChatMessages_";
 11        private const int PRE_INSTANTIATED_ENTRIES = 30;
 12
 13        [SerializeField] private DefaultChatEntry defaultMessagePrefab;
 14        [SerializeField] private DefaultChatEntry systemMessagePrefab;
 15        [SerializeField] private DefaultChatEntry privateReceivedMessagePrefab;
 16        [SerializeField] private DefaultChatEntry privateSentMessagePrefab;
 17        [SerializeField] private DefaultChatEntry publicReceivedMessagePrefab;
 18        [SerializeField] private DefaultChatEntry publicSentMessagePrefab;
 19
 320        private readonly Dictionary<ChatEntry, PoolableObject> pooledObjects =
 21            new Dictionary<ChatEntry, PoolableObject>();
 22
 23        public ChatEntry Create(ChatEntryModel model)
 24        {
 525            if (model.messageType == ChatMessage.Type.SYSTEM)
 026                return GetEntryFromPool("SYSTEM", systemMessagePrefab);
 27
 528            if (model.messageType == ChatMessage.Type.PUBLIC)
 29            {
 330                if (model.subType == ChatEntryModel.SubType.RECEIVED)
 131                    return GetEntryFromPool("PUBLIC_RECEIVED", publicReceivedMessagePrefab);
 232                if (model.subType == ChatEntryModel.SubType.SENT)
 233                    return GetEntryFromPool("PUBLIC_SENT", publicSentMessagePrefab);
 34            }
 235            else if (model.messageType == ChatMessage.Type.PRIVATE)
 36            {
 237                if (model.subType == ChatEntryModel.SubType.RECEIVED)
 138                    return GetEntryFromPool("PRIVATE_RECEIVED", privateReceivedMessagePrefab);
 139                if (model.subType == ChatEntryModel.SubType.SENT)
 140                    return GetEntryFromPool("PRIVATE_SENT", privateSentMessagePrefab);
 41            }
 042            return GetEntryFromPool("DEFAULT", defaultMessagePrefab);
 43        }
 44
 45        public void Destroy(ChatEntry entry)
 46        {
 047            if (!pooledObjects.TryGetValue(entry, out var pooledObj)) return;
 048            pooledObj.Release();
 049            pooledObjects.Remove(entry);
 050        }
 51
 52        private DefaultChatEntry GetEntryFromPool(string poolName, DefaultChatEntry prefab)
 53        {
 554            var pool = GetPool(poolName, prefab);
 555            var pooledObj = pool.Get();
 556            var entry = pooledObj.gameObject.GetComponent<DefaultChatEntry>();
 557            pooledObjects[entry] = pooledObj;
 558            return entry;
 59        }
 60
 61        private Pool GetPool(string poolName, DefaultChatEntry prefab)
 62        {
 563            var poolId = POOL_NAME_PREFIX + poolName + GetInstanceID();
 564            var entryPool = PoolManager.i.GetPool(poolId);
 665            if (entryPool != null) return entryPool;
 66
 467            entryPool = PoolManager.i.AddPool(
 68                poolId,
 69                Instantiate(prefab).gameObject,
 70                maxPrewarmCount: PRE_INSTANTIATED_ENTRIES,
 71                isPersistent: true);
 472            entryPool.ForcePrewarm();
 73
 474            return entryPool;
 75        }
 76    }
 77}