Ejemplo n.º 1
0
        private async void OnPushSenderTimedEvent(object source, ElapsedEventArgs e)
        {
            _timerPushSender.Stop();

            _logger.Info("Сработал таймер отправки");

            int?sendedCount = null;

            try
            {
                PushAllSendResult result = await _advertSender.DoWork();

                var stringBuilder = new StringBuilder();

                stringBuilder.AppendLine("Отправка окончена. Результат:");
                stringBuilder.AppendLine(string.Format("Число сообщений до отправки: {0}", result.BeforeTotal));
                stringBuilder.AppendLine(string.Format("Число успешно отправленных сообщений: {0}", result.SendOk));
                stringBuilder.AppendLine(string.Format("Число не отправленных сообщений: {0}", result.SendFail));
                stringBuilder.AppendLine(string.Format("Число сообщений после отправки: {0}", result.AfterTotal));
                stringBuilder.AppendLine(string.Format("Общее число сообщений: {0}", result.GrandTotal));

                _logger.Info(stringBuilder.ToString());

                sendedCount = result.SendOk;
            }
            catch (Exception ex)
            {
                _logger.Error("Application.OnPushSenderTimedEvent", ex);
            }

            _timerPushSender.Interval = sendedCount.HasValue && sendedCount.Value > 0 ? 31000 : 10000;
            _timerPushSender.Start();
        }
Ejemplo n.º 2
0
        public async Task <PushAllSendResult> DoWork()
        {
            var result = new PushAllSendResult();

            try
            {
                result.BeforeTotal = _context.Adverts.Count(a => !a.IsNotificated);

                List <Advert> adverts = _context.Adverts.Where(a => !a.IsNotificated).OrderBy(a => a.CreatedDate).Take(5).ToList();

                foreach (var advert in adverts)
                {
                    bool isSended = _pushNotificationSender.Send(advert);

                    if (isSended)
                    {
                        advert.IsNotificated         = true;
                        _context.Entry(advert).State = EntityState.Modified;
                        _context.SaveChanges();

                        result.SendOk = result.SendOk + 1 ?? 1;
                    }
                    else
                    {
                        result.SendFail = result.SendFail + 1 ?? 1;
                    }

                    await Task.Delay(31000);
                }

                result.AfterTotal = _context.Adverts.Count(a => !a.IsNotificated);
                result.GrandTotal = _context.Adverts.Count();
            }
            catch (Exception ex)
            {
                _logger.Error("AdvertSender", ex);
            }

            return(result);
        }