Переработанная версия ядра
All checks were successful
CI / build-test (push) Successful in 42s

This commit is contained in:
2025-12-05 12:57:05 +03:00
parent ee175a35a0
commit d817417a69
81 changed files with 2335 additions and 1453 deletions

View File

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