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 }