예제 #1
0
 public ReminderDomain(IReminderStorage storage, IReminderReceiver receiver, IReminderSender sender, TimeSpan awaitingRemindersCheckPeriod, TimeSpan readyReminderSendPeriod)
 {
     _storage  = storage;
     _receiver = receiver;
     _sender   = sender;
     _awaitingRemindersCheckPeriod = awaitingRemindersCheckPeriod;
     _readyReminderCheckPeriod     = readyReminderSendPeriod;
 }
예제 #2
0
 public ReminderDomain(
     IReminderStorage storage,
     IReminderReceiver receiver, IReminderSender sender,
     TimeSpan awaitingRemindersCheckingPeriod,
     TimeSpan readyRemindersSendingPeriod) : this(storage, receiver, sender)
 {
     _awaitingRemindersCheckingPeriod = awaitingRemindersCheckingPeriod;
     _readyRemindersSendingPeriod     = readyRemindersSendingPeriod;
 }
예제 #3
0
 public ReminderScheduler(
     ILogger <ReminderScheduler> logger,
     IReminderStorage storage,
     IReminderSender sender,
     IReminderReceiver receiver)
 {
     _logger   = logger ?? throw new ArgumentNullException(nameof(logger));
     _storage  = storage ?? throw new ArgumentNullException(nameof(storage));
     _sender   = sender ?? throw new ArgumentNullException(nameof(sender));
     _receiver = receiver ?? throw new ArgumentNullException(nameof(receiver));
 }
예제 #4
0
 public ReminderService(
     IReminderStorage storage,
     IReminderSender sender,
     IReminderReceiver receiver,
     ReminderServiceParameters parameters)
 {
     _storage    = storage ?? throw new ArgumentNullException(nameof(storage));
     _sender     = sender ?? throw new ArgumentNullException(nameof(sender));
     _receiver   = receiver ?? throw new ArgumentNullException(nameof(receiver));
     _parameters = parameters ?? throw new ArgumentNullException(nameof(parameters));
 }
예제 #5
0
        public ReminderDomain(IReminderStorage storage, IReminderReceiver receiver, IReminderSender sender)
        {
            _storage  = storage;
            _receiver = receiver;
            _sender   = sender;

            _receiver.MessageReceived += Receiver_MessageReceived;

            _awaitingRemindersCheckingPeriod = TimeSpan.FromSeconds(1);
            _readyRemindersSendingPeriod     = TimeSpan.FromSeconds(1);
        }
예제 #6
0
 public ReminderDomain(
     IReminderStorage storage,
     IReminderReceiver receiver,
     IReminderSender sender)
     : this(
         storage,
         receiver,
         sender,
         TimeSpan.FromMinutes(1),
         TimeSpan.FromMinutes(1))
 {
 }
예제 #7
0
        public ReminderDomain(
            IReminderStorage storage,
            IReminderReceiver receiver,
            TimeSpan awaitingRemindersCheckingPeriod,
            TimeSpan readyRemindersSendingPeriod)
        {
            _storage  = storage;
            _receiver = receiver;
            _awaitingRemindersCheckingPeriod = awaitingRemindersCheckingPeriod;
            _readyRemindersSendingPeriod     = readyRemindersSendingPeriod;

            _receiver.MessageReceived += Receiver_MessageReceived;
        }
예제 #8
0
 public ReminderService(
     IReminderStorage storage,
     IReminderSender sender,
     IReminderReceiver receiver,
     ReminderServiceParameters parameters)
 {
     if (parameters == null)
     {
         throw new ArgumentNullException(nameof(parameters));
     }
     _storage  = storage ?? throw new ArgumentNullException(nameof(storage));
     _sender   = sender ?? throw new ArgumentNullException(nameof(sender));
     _receiver = receiver ?? throw new ArgumentNullException(nameof(receiver));
     _receiver.MessageReceived += OnMessageReceived;
     _createdItemTimer          = new Timer(OnCreatedItemTimerTick, null,
                                            parameters.CreateTimerDelay, parameters.CreateTimerInterval);
     _readyItemTimer = new Timer(OnReadyItemTimerTick, null,
                                 parameters.ReadyTimerDelay, parameters.ReadyTimerInterval);
 }
예제 #9
0
 public ReminderDomain(
     IReminderStorage storage,
     IReminderReceiver receiver)
     : this(storage, receiver, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1))
 {
 }
예제 #10
0
        public ReminderDomain(
            IReminderStorage storage,
            IReminderReceiver receiver,
            TimeSpan awaitingRemindersCheckingPeriod,
            TimeSpan readyRemindersSendingPeriod)
        {
            _storage  = storage;
            _receiver = receiver;
            _awaitingRemindersCheckingPeriod = awaitingRemindersCheckingPeriod;
            _readyRemindersSendingPeriod     = readyRemindersSendingPeriod;

            _receiver.MessageReceived += (s, e) =>
            {
                MessageReceived?.Invoke(
                    this,
                    new MessageReceivedEventArgs
                {
                    ContactId = e.ContactId,
                    Message   = e.Message
                });

                ParsedMessage parsedMessage;

                try
                {
                    parsedMessage = MessageParser.Parse(e.Message);

                    MessageParsingSuccedded?.Invoke(
                        this,
                        new MessageParsingSucceddedEventArgs
                    {
                        ContactId = e.ContactId,
                        Date      = parsedMessage.Date,
                        Message   = parsedMessage.Message
                    });
                }
                catch (Exception ex)
                {
                    MessageParsingFailed?.Invoke(
                        this,
                        new MessageParsingFailedEventArgs
                    {
                        ContactId        = e.ContactId,
                        Message          = e.Message,
                        ParsingException = ex
                    });

                    return;
                }

                var item = new ReminderItem(
                    parsedMessage.Date,
                    parsedMessage.Message,
                    e.ContactId);

                try
                {
                    storage.Add(item);
                    AddingToStorageSucceeded?.Invoke(
                        this,
                        new AddingToStorageSucceddedEventArgs
                    {
                        ContactId = e.ContactId,
                        Message   = e.Message
                    });
                }
                catch (Exception ex)
                {
                    AddingToStorageFailed?.Invoke(
                        this,
                        new AddingToStorageFailedEventArgs
                    {
                        ContactId       = e.ContactId,
                        Message         = e.Message,
                        AddingException = ex
                    });
                }
            };
        }