public async Task SendAsync <T>(T command) where T : Command { UnitOfWork = _unitOfWorkManager.Build(); _logger.LogDebug("EXECUTE> _unitOfWorkManager.Build()"); var commandHandler = CommandHandlerFactory.GetHandler <T>(); try { UnitOfWork.Begin(new UnitOfWorkOption() { IsolationLevel = IsolationLevel.ReadCommitted }); await commandHandler.ExecuteAsync(command); await UnitOfWork.CommitAsync(); } catch (Exception ex) { //log throw ex; } ////处理事件,保证最终一致性 //if (command.Events != null && command.Events.Any()) //{ // var eventPublisher = AppConfig.Current.IoCManager.GetService<IEventPublisher>(); // await eventPublisher.PublishAsync(command.Events); //} _logger.LogDebug("EXECUTE> UnitOfWork.CommitAsync()"); }
private async Task HandleEvent(EventContext eventContext) { var action = (string)eventContext.WebHookEvent.GetPayload().action; var body = (string)eventContext.WebHookEvent.GetPayload().issue.body; body = body.Trim(); var parts = body.Split(' ').Select(q => q.Trim()).ToArray(); var authorAssociation = (string)eventContext.WebHookEvent.GetPayload().issue.author_association; var commandHandler = CommandHandlerFactory.GetHandler(action, parts, authorAssociation, eventContext); await commandHandler.Execute(action, parts, authorAssociation, eventContext, _SophiaDbContext); }
public void Send <T>(T command) where T : Command { var commandHandler = CommandHandlerFactory.GetHandler <T>(); try { UnitOfWork.BeginTransaction(new UnitOfWorkOptions() { IsolationLevel = IsolationLevel.ReadCommitted }); //translation.open() commandHandler.Execute(command); UnitOfWork.Commit(); } catch (Exception ex) { //log(ex) //db.RollBack() UnitOfWork.RollBack(); throw ex; } }
private async void HandlerMessageAsync(object sender, MessageEventArgs e) { string text = e.Message.Text?.Trim(); if (text == null || !text.StartsWith("/")) { return; } var command = GetCommandFromMessage(text); var handler = CommandHandlerFactory.GetHandler(command); if (handler == null) { return; } using var scope = this.serviceScopeFactory.CreateScope(); var db = scope.ServiceProvider.GetService <TymDbContext>(); var user = await db.Users .Where(u => u.UserId == e.Message.From.Id) .FirstOrDefaultAsync(); if (user == null && !string.Equals(command, BotCommands.Start, StringComparison.OrdinalIgnoreCase)) { await botClient.SendTextMessageAsync( chatId : e.Message.Chat, text : $"Please start {Bot.FirstName}.", parseMode : ParseMode.Markdown, disableNotification : true, replyToMessageId : e.Message.MessageId, replyMarkup : new InlineKeyboardMarkup(InlineKeyboardButton.WithUrl( $"Start {Bot.FirstName}", $"https://t.me/{Bot.Username}?start=1" )) ); return; } var response = await handler.HandleAsync(e.Message, db); if (response?.Length > 0) { ParseMode parseMode = command != BotCommands.FriendList ? ParseMode.Default : ParseMode.Markdown; if ((command == BotCommands.Time || command == BotCommands.FriendList) && user.ChatId.HasValue) { await botClient.SendTextMessageAsync( new Chat() { Id = user.ChatId.Value, Type = ChatType.Private }, response, parseMode : parseMode ); } else { await botClient.SendTextMessageAsync( e.Message.Chat, response, replyToMessageId : e.Message.MessageId, parseMode : parseMode ); } } }