Salmon/Salmon.Core/Instance.cs
2025-02-01 18:08:35 +01:00

77 lines
1.8 KiB
C#

using Salmon.Core.Depth;
using System.Resources;
namespace Salmon.Core;
public class Instance
{
public Depth.Persistence? Persistence { get; set; } = null;
public Depth.StateMachine State { get; } = new Depth.StateMachine();
public Depth.EventManager Event { get; } = new Depth.EventManager();
public Cliff.Translator Translator { get; set; } = new Cliff.Translator();
public Instance(Persistence? persistence = null)
{
Persistence = persistence;
State.Events = Event;
State.History = persistence;
Event.History = persistence;
}
public async Task Init()
{
await State.PopulateWithHistory();
}
public IEnumerable<Element> GetAllElements()
{
List<Element> els = new();
foreach (var id in State.GetIds().ToArray())
{
var ts = State.Get(id).ToList();
var el = Translator.Decode(ts);
els.Add(el);
}
return els;
}
public void Set(Event e)
{
Event.Push(e);
}
public void Set(Element element)
{
var triplets = Translator.Encode(element);
Set(triplets);
}
public void Set(IEnumerable<Triplet> triplets)
{
foreach (var t in triplets)
State.Push(t.key, t.predicate, t.value, t.LastFlush);
}
public void Add(IEnumerable<Event> events)
{
foreach (var i in events)
Event.Push(i);
}
public T? RetrieveElement<T>(string id) where T : Element
{
var triplets = State.Get(id).ToList();
if (triplets.Count == 0)
return null;
return Translator.Decode<T>(triplets);
}
public DateTime? GetLastElementUpdate(string id)
{
return State.GetLastUpdate(id);
}
}