Ejemplo n.º 1
0
        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);;
            }
        }
Ejemplo n.º 2
0
        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);
                }
            }
        }
Ejemplo n.º 3
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);
            }
        }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        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));
                }
            }
        }
Ejemplo n.º 6
0
        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");
            }
        }
Ejemplo n.º 7
0
        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));
            }
        }
Ejemplo n.º 8
0
        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));
                }
            }
        }
Ejemplo n.º 9
0
        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);
                }
            }
        }
Ejemplo n.º 10
0
        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);
                }
            }
        }