Example #1
0
        private void SendReadyToSendReminders(object _)
        {
            var readyItems = _storage.GetList(new[] { ReminderItemStatus.ReadyToSend });

            foreach (var readyItem in readyItems)
            {
                var sendingModel = new SendReminderModel(readyItem);

                try
                {
                    _sender.Send(sendingModel.AccountId, sendingModel.Message);

                    readyItem.Status = ReminderItemStatus.SuccessfullySent;

                    SendingSucceeded?.Invoke(this, new SendingSucceededEventArgs(sendingModel));
                }
                catch (Exception exception)
                {
                    readyItem.Status = ReminderItemStatus.Failed;

                    SendingFailed?.Invoke(this, new SendingFailedEventArgs(sendingModel, exception));
                }

                _storage.Update(readyItem);
            }
        }
Example #2
0
        public void SendReadyReminders(object dummy)
        {
            var sendReminderModels = _storage
                                     .Get(ReminderItemStatus.Ready)
                                     .Select(r =>
                                             new SendReminderModel
            {
                Id        = r.Id,
                Message   = r.Message,
                ContactId = r.ContactId
            });

            foreach (SendReminderModel sendReminder in sendReminderModels)
            {
                try
                {
                    SendReminder?.Invoke(sendReminder);

                    _storage.UpdateStatus(sendReminder.Id, ReminderItemStatus.Sent);

                    SendingSucceded?.Invoke(this, new SendingSuccededEventArgs(sendReminder));
                }
                catch (Exception exception)
                {
                    _storage.UpdateStatus(sendReminder.Id, ReminderItemStatus.Failed);

                    SendingFailed?.Invoke(this, new SendingFailedEventArgs(sendReminder, exception));
                }
            }
        }
        private void SendReadyReminders(object _)
        {
            var readyItems = _storage.GetList(
                new[] { ReminderItemStatus.ReadyToSent })
                             .Where(i => i.IsTimeToSend);

            foreach (var readyItem in readyItems)
            {
                var sendingModel = new SendReminderModel(readyItem);

                try
                {
                    //попытка послать уведомление

                    //SendReminder?.Invoke(sendingModel);
                    _sender.Send(
                        sendingModel.ContactId,
                        sendingModel.Message);

                    readyItem.Status = ReminderItemStatus.SuccessfullySent;

                    SendingSucceeded?.Invoke(this, new SendingSucceededEventArgs(sendingModel));

                    //if succesfull send message
                }
                catch (Exception exception)
                {
                    readyItem.Status = ReminderItemStatus.Failed;

                    SendingFailed?.Invoke(this, new SendingFailedEventArgs(sendingModel, exception));
                }

                _storage.Update(readyItem);
            }
        }
Example #4
0
        private void SendReadyReminders(object state)
        {
            //ищем записи
            var readyReminders = _storage.Get(ReminderItemStatus.Ready);

            foreach (var readyReminder in readyReminders)
            {
                try
                {
                    SendReminder(readyReminder);
                    _storage.Update(readyReminder.Id, ReminderItemStatus.Sent);
                    SendingSucceeded?.Invoke(this, new SendingSucceeededEventArgs
                    {
                        SendingItem = readyReminder
                    });
                }
                catch (Exception e)
                {
                    _storage.Update(readyReminder.Id, ReminderItemStatus.Failed);

                    SendingFailed?.Invoke(
                        this,
                        new SendingFailedEventArgs
                    {
                        SendingItem      = readyReminder,
                        SendingException = e
                    });
                }
            }

            //отправляем

            //Если ок  то в статус send, иначе failed
        }
Example #5
0
        private void SendReadyReminders(object state)
        {
            // find ready reminders
            // try "send"
            // if success update status to Sent
            // else update status to Failed

            var readyReminders = _storage.Get(ReminderItemStatus.Ready);

            foreach (var readyReminder in readyReminders)
            {
                try
                {
                    // try "send"
                    SendReminder(readyReminder);

                    // update status to Sent
                    _storage.Update(
                        readyReminder.Id,
                        ReminderItemStatus.Sent);

                    // send event
                    SendingSucceeded?.Invoke(
                        this,
                        new SendingSucceededEventArgs
                    {
                        SendingItem = readyReminder
                    });
                }
                catch (Exception e)
                {
                    // update status to Failed
                    _storage.Update(
                        readyReminder.Id,
                        ReminderItemStatus.Failed);

                    // send event
                    SendingFailed?.Invoke(
                        this,
                        new SendingFailedEventArgs
                    {
                        SendingItem      = readyReminder,
                        SendingException = e
                    });
                }
            }
        }
Example #6
0
        private void SendReadyReminders(object state)
        {
            //отправка
            //находим что отправлять
            //отправляем
            //если ок  то статус в set
            //инача статус в failed

            var readyReminders = _storage.Get(ReminderItemStatus.Ready);

            foreach (var readyReminder in readyReminders)
            {
                try
                {
                    //отправляем, используем делегат
                    SendReminder(readyReminder);
                    //статус в sent
                    _storage.Update(
                        readyReminder.Id,
                        ReminderItemStatus.Sent);

                    //запускаем событие об успешной отправке
                    SendingSuccedded?.Invoke(
                        this,
                        new SendingSucceededEventArgs
                    {
                        SendingItem = readyReminder
                    });
                }
                catch (Exception e)
                {
                    //статус в fault
                    _storage.Update(
                        readyReminder.Id,
                        ReminderItemStatus.Failed);

                    //запускаем событие о сбое отправки
                    SendingFailed?.Invoke(
                        this,
                        new SendingFailedEventArgs
                    {
                        SendingItem      = readyReminder,
                        SendingException = e
                    });
                }
            }
        }
Example #7
0
        public void Handle(SendingFailed @event)
        {
            _dbContext.Set <FaultMessage>().Add(new FaultMessage
            {
                Id        = Guid.NewGuid(),
                RequestId = @event.RequestId,
                MessageId = @event.MessageId,
                Message   = @event.Message,
                Reason    = @event.Reason,
                TriedAt   = @event.TriedAt
            });

            _eventPublisher.Publish(new FaultAnalysisRequired
            {
                MessageId = @event.MessageId,
                Message   = @event.Message
            });

            _eventPublisher.Publish(new OutboxManagementNeeded());
        }
Example #8
0
        public async Task HandleAsync(SendingFailed @event)
        {
            _dbContext.Set <FaultMessage>().Add(new FaultMessage
            {
                Id        = Guid.NewGuid(),
                RequestId = @event.RequestId,
                MessageId = @event.MessageId,
                Message   = @event.Message,
                Reason    = @event.Reason,
                TriedAt   = @event.TriedAt
            });

            await _eventPublisher.PublishAsync(new FaultAnalysisRequired
            {
                MessageId = @event.MessageId,
                Message   = @event.Message
            }).ConfigureAwait(false);

            await _eventPublisher.PublishAsync(new OutboxManagementNeeded()).ConfigureAwait(false);
        }
 public void OnSendingFailed(object sender, SendingFailedEventArgs e)
 {
     SendingFailed?.Invoke(sender, e);
 }
Example #10
0
 protected virtual void OnSendingFailed(IMessageModel e) => SendingFailed?.Invoke(this, e);