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); } }
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); } }
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 }
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 }); } } }
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 }); } } }
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()); }
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); }
protected virtual void OnSendingFailed(IMessageModel e) => SendingFailed?.Invoke(this, e);