mirror of
https://github.com/esiur/esiur-dotnet.git
synced 2026-09-08 10:10:49 +00:00
Revisions
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user