namespace Thor.Shared; public class Register { List Entries = new(); public void Add(Entry entry) { Entries.Add(entry); } public void Clear() { Entries.Clear(); } public List 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); } }