73 lines
1.6 KiB
C#
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);
|
|
}
|
|
}
|