using Kean.Domain.Identity.Commands; using Kean.Domain.Identity.Events; using Kean.Domain.Identity.Repositories; using System.Threading; using System.Threading.Tasks; namespace Kean.Domain.Identity.CommandHandlers { /// /// 终结命令处理程序 /// public sealed class FinalizeCommandHandler : CommandHandler { private readonly ICommandBus _commandBus; // 消息总线 private readonly ISessionRepository _sessionRepository; // 会话仓库 /// /// 依赖注入 /// public FinalizeCommandHandler( ICommandBus commandBus, ISessionRepository sessionRepository) { _commandBus = commandBus; _sessionRepository = sessionRepository; } /// /// 处理程序 /// public override async Task Handle(FinalizeCommand command, CancellationToken cancellationToken) { var session = await _sessionRepository.LoadKeys(); foreach (var item in session) { if (await _sessionRepository.IsTimeout(item)) { await _sessionRepository.RemoveSession(item); } } await _commandBus.Trigger(new FinalizeSuccessEvent { Session = session }, cancellationToken); } } }