private void CheckReadyReminders(object state) { var readyToSendItems = _storage.GetList(ReminderItemStatus.Awaiting); foreach (var reminderItem in readyToSendItems) { try { _sender.Send(reminderItem.ContactId, reminderItem.Message); reminderItem.Status = ReminderItemStatus.SuccessfullySent; OnSendingSucceeded( this, new ActionSucceededEventArgs(reminderItem)); // Raise event SendingSucceeded; } catch (Exception exception) { reminderItem.Status = ReminderItemStatus.Failed; OnSendingFailed( this, new SendingFailedEventArgs(reminderItem, exception)); // Raise event SendingFailed; } _storage.Update(reminderItem);; } }
private void OnTimerTick(object state) { _logger.LogDebug("Ticked timer"); var datetime = DateTimeOffset.UtcNow; var reminders = _storage.FindBy(ReminderItemFilter.CreatedAt(datetime)); foreach (var reminder in reminders) { _logger.LogInformation($"Mark reminder {reminder.Id:N} as ready"); reminder.MarkReady(); try { _logger.LogInformation($"Sending reminder {reminder.Id:N}"); _sender.Send( new ReminderNotification( reminder.ContactId, reminder.Message, reminder.DateTime ) ); OnReminderSent(reminder); } catch (ReminderSenderException exception) { _logger.LogError(exception, "Exception occured while sending notification"); OnReminderFailed(reminder); } } }
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); } }
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); } }
public async Task SendReadyRemiders() { var reminders = storage.Get(ReminderStatus.ReadyToSend, 0, 0).Where(r => r.IStimeToAlarm).ToList(); foreach (ReminderItem r_item in reminders) { SendReminderItemModel sendModel = new SendReminderItemModel() { id = r_item.Id, contactId = r_item.contactId, Message = r_item.Message }; try { storage.UpdateStatus(sendModel.id, ReminderStatus.Sended); await sender.Send(sendModel.contactId, sendModel.Message); OnSuccesSend?.Invoke(this, new SendSuccesEventArgs(r_item)); } catch (Exception e) { storage.UpdateStatus(sendModel.id, ReminderStatus.Failed); OnFailedSend?.Invoke(this, new SendFailedEventArgs(e, r_item)); } } }
private void ReminderReceiver_MessageReceived( object sender, MessageReceivedEventArgs e) { if (e.Message.ToLower() == "help") { _sender.Send(e.ContactId, MessageParser.GetHelpMessage()); return; } var parsedMessage = MessageParser.Parse(e.Message); if (parsedMessage != null) { var reminder = new ReminderItemRestricted { ContactId = e.ContactId, Message = parsedMessage.Message, Date = parsedMessage.Date, Status = ReminderItemStatus.Awaiting }; _storage.Add(reminder); _sender.Send(e.ContactId, "Ок, напомню"); AddingSuccedded?.Invoke( this, new AddingSuccededEventArgs( new AddReminderModel( reminder.ContactId, reminder.Message, reminder.Date))); } else { _sender.Send( e.ContactId, "Не понимаю =("); _sender.Send( e.ContactId, "Для помощи введите help"); } }
private void OnReceiverMessageReceived(object sender, MessageReceivedEventArgs e) { ReminderItemRestricted reminderItemRestricted = null; try { MessageParser.Parse( e.Message, out DateTimeOffset date, out string replyMessage); reminderItemRestricted = new ReminderItemRestricted( date, replyMessage, e.ContactId, ReminderItemStatus.Awaiting); } catch (Exception exception) { _sender.Send(e.ContactId, $"Invalid input string format, try again! Exception: {exception}"); } if (reminderItemRestricted == null) { return; } try { Guid id = _storage.Add(reminderItemRestricted); OnAddingSucceeded( this, new AddingSucceededEventArgs(reminderItemRestricted.ToReminderItem(id))); } catch (Exception exception) { OnAddingFailed( this, new AddingFailedEventArgs(reminderItemRestricted.ToReminderItem(Guid.Empty), exception)); } }
private void SendReadyReminders(object dummy) { var sendReminderModels = _storage .Get(ReminderItemStatus.Ready) .Select(r => new SendReminderModel { Id = r.Id, Message = r.Message, ContactId = r.ContactId }) .ToList(); foreach (SendReminderModel sendReminder in sendReminderModels) { try { _sender.Send( sendReminder.ContactId, sendReminder.Message); _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 OnReadyItemTimerTick(object _) { var filter = ReminderItemFilter.ByStatus(ReminderItemStatus.Ready); var items = _storage.FindBy(filter); foreach (var item in items) { try { _sender.Send( new Notification(item.ContactId, item.Message, item.MessageDate) ); OnItemSent(item); } catch (Exception ex) { OnItemFailed(item); } } }
private void OnReadyTimerTick(object _) { var filter = new ReminderItemFilter(status: ReminderItemStatus.Ready); var items = _storage.FindBy(filter); foreach (var item in items) { try { var notification = new Notification( item.ContactId, item.Message, item.DatetimeUtc); _sender.Send(notification); OnReminderSent(item); } catch (NotificationException exception) { OnReminderFailed(item, exception); } } }