using BotPages.Core.Abstractions; using System.Collections.Concurrent; namespace BotPages.Core.Storage; /// /// Памятное хранилище состояния. /// public sealed class InMemoryStateStorage : IStateStorage { private readonly ConcurrentDictionary> _store = new(); /// public Task GetAsync(CompositeSessionKey session, string key, CancellationToken ct) => Task.FromResult(_store.TryGetValue(session, out var dict) ? dict.TryGetValue(key, out var obj) ? (T?)obj : default : default); /// public Task SetAsync(CompositeSessionKey session, string key, T state, CancellationToken ct) { _store[session][key] = state!; return Task.CompletedTask; } /// public Task RemoveAsync(CompositeSessionKey session, string key, CancellationToken ct) => Task.FromResult(_store.TryGetValue(session, out var dict) ? dict.TryRemove(key, out _) : true); public Task ClearAsync(CompositeSessionKey session, CancellationToken ct) => Task.FromResult(_store.TryRemove(session, out _)); }