Thor/Thor.Shared/Register.cs
2025-02-10 18:38:27 +01:00

73 lines
1.6 KiB
C#

namespace Thor.Shared;
public class Register
{
List<Entry> Entries = new();
public void Add(Entry entry)
{
Entries.Add(entry);
}
public void Clear()
{
Entries.Clear();
}
public List<Entry> GetEntriesOrdered(string itemid)
{
var entries = Entries
.Where(e => e.Target == itemid)
.ToList();
entries.Sort((a, b) => a.When.CompareTo(b.When));
return entries;
}
public ItemAnswer ForgeItemAnswer(string itemid)
{
var entries = GetEntriesOrdered(itemid);
ItemAnswer ret = new();
ret.TargetId = itemid;
// fastpass ☺
if (entries.Count == 0)
return ret;
foreach (var entry in entries)
{
if (entry.Type == Entry.EntryType.Set)
{
if (!entry.State.HasValue)
throw new Exception("Entry typed Set send without any State.");
ret.CurrentState = entry.State.Value;
}
else
throw new NotImplementedException();
Entries.Add(entry);
}
return ret;
}
public ItemAnswer.State GetItemState(string itemid)
{
var entries = Entries
.Where(e
=> e.Target == itemid
&& e.Type == Entry.EntryType.Set)
.OrderByDescending(e => e.When)
.ToList();
if(entries.Count == 0)
return default(ItemAnswer.State);
var firstEntryState = entries.First().State;
return firstEntryState ?? default(ItemAnswer.State);
}
}