/ GUNRPG.Application / Sessions / InMemoryCombatSessionStore.cs
InMemoryCombatSessionStore.cs
 1  using System.Collections.Concurrent;
 2  
 3  namespace GUNRPG.Application.Sessions;
 4  
 5  public sealed class InMemoryCombatSessionStore : ICombatSessionStore
 6  {
 7      private readonly ConcurrentDictionary<Guid, CombatSessionSnapshot> _sessions = new();
 8  
 9      public Task SaveAsync(CombatSessionSnapshot snapshot)
10      {
11          _sessions[snapshot.Id] = snapshot;
12          return Task.CompletedTask;
13      }
14  
15      public Task<CombatSessionSnapshot?> LoadAsync(Guid id)
16      {
17          _sessions.TryGetValue(id, out var snapshot);
18          return Task.FromResult(snapshot);
19      }
20  
21      public Task DeleteAsync(Guid id)
22      {
23          _sessions.TryRemove(id, out _);
24          return Task.CompletedTask;
25      }
26  
27      public Task<IReadOnlyCollection<CombatSessionSnapshot>> ListAsync()
28      {
29          IReadOnlyCollection<CombatSessionSnapshot> snapshots = _sessions.Values.ToArray();
30          return Task.FromResult(snapshots);
31      }
32  }