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