Revisions

This commit is contained in:
2026-08-09 03:54:28 +03:00
parent 2028db671f
commit 3b55d8d2f8
37 changed files with 1743 additions and 230 deletions
+27 -1
View File
@@ -10,7 +10,7 @@ using Esiur.Data.Types;
namespace Esiur.Stores;
public class MemoryStore : IStore
public class MemoryStore : IStore, IResourceJournalStore
{
public Instance Instance { get; set; }
@@ -18,6 +18,31 @@ public class MemoryStore : IStore
KeyList<uint, IResource> resources = new KeyList<uint, IResource>();
readonly IResourceJournalStore journal;
public MemoryStore()
: this(new ResourceJournalBuffer())
{
}
public MemoryStore(IResourceJournalStore journal)
{
this.journal = journal ?? throw new ArgumentNullException(nameof(journal));
}
public ResourceCursor OpenJournal(
IResource resource,
string resourceKey,
ResourceCursor proposedCursor) =>
journal.OpenJournal(resource, resourceKey, proposedCursor);
public bool AppendJournalEntry(IResource resource, ResourceJournalEntry entry, bool retain) =>
journal.AppendJournalEntry(resource, entry, retain);
public ResourceJournalPage QueryJournal(IResource resource, ResourceJournalQuery query) =>
journal.QueryJournal(resource, query);
public void RemoveJournal(IResource resource) => journal.RemoveJournal(resource);
public void Destroy()
{
@@ -161,6 +186,7 @@ public class MemoryStore : IStore
AsyncReply<bool> IStore.Remove(IResource resource)
{
resources.Remove(resource.Instance.Id);
journal.RemoveJournal(resource);
return AsyncReply.FromResult(true);
}
+17 -1
View File
@@ -9,13 +9,28 @@ using Esiur.Data;
using Esiur.Data.Types;
namespace Esiur.Stores;
public class TemporaryStore : IStore
public class TemporaryStore : IStore, IResourceJournalStore
{
public Instance Instance { get; set; }
public event DestroyedEvent OnDestroy;
Dictionary<uint, WeakReference> resources = new Dictionary<uint, WeakReference>();
readonly ResourceJournalBuffer journal = new();
public ResourceCursor OpenJournal(
IResource resource,
string resourceKey,
ResourceCursor proposedCursor) =>
journal.OpenJournal(resource, resourceKey, proposedCursor);
public bool AppendJournalEntry(IResource resource, ResourceJournalEntry entry, bool retain) =>
journal.AppendJournalEntry(resource, entry, retain);
public ResourceJournalPage QueryJournal(IResource resource, ResourceJournalQuery query) =>
journal.QueryJournal(resource, query);
public void RemoveJournal(IResource resource) => journal.RemoveJournal(resource);
public void Destroy()
{
@@ -90,6 +105,7 @@ public class TemporaryStore : IStore
AsyncReply<bool> IStore.Remove(IResource resource)
{
resources.Remove(resource.Instance.Id);
journal.RemoveJournal(resource);
return new AsyncReply<bool>(true);
}