This repository has been archived by the owner on Jan 18, 2022. It is now read-only.
/
CommandMetaDataAggregate.cs
62 lines (54 loc) · 1.79 KB
/
CommandMetaDataAggregate.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
using System;
using System.Collections.Generic;
namespace Improbable.Gdk.Core
{
public class CommandMetaDataAggregate
{
private readonly List<CommandMetaData> metaData = new List<CommandMetaData>();
public void MarkIdForRemoval(uint componentId, uint commandId, uint internalRequestId)
{
foreach (var data in metaData)
{
if (data.ContainsCommandMetaData(internalRequestId))
{
data.MarkIdForRemoval(componentId, commandId, internalRequestId);
}
}
}
public void FlushRemovedIds()
{
foreach (var data in metaData)
{
data.FlushRemovedIds();
}
}
public CommandContext<T> GetContext<T>(uint componentId, uint commandId, uint internalRequestId)
{
foreach (var data in metaData)
{
if (data.ContainsCommandMetaData(internalRequestId))
{
return data.GetContext<T>(componentId, commandId, internalRequestId);
}
}
throw new ArgumentException($"Can not find meta data for internal request ID {internalRequestId}");
}
internal void AddMetaData(CommandMetaData commandMetaData)
{
metaData.Add(commandMetaData);
}
internal void ReturnEmptyStorageToPool(ConcurrentPool<CommandMetaData> pool)
{
for (int i = 0; i < metaData.Count; ++i)
{
if (!metaData[i].IsEmpty())
{
continue;
}
pool.Return(metaData[i]);
metaData.RemoveAt(i);
ReturnEmptyStorageToPool(pool);
}
}
}
}