示例#1
0
        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()");
        }
示例#2
0
        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);
        }
示例#3
0
        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;
            }
        }
示例#4
0
        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
                        );
                }
            }
        }