Ejemplo n.º 1
0
        /// <summary>
        /// опубликовать информация об обновлении книги
        /// </summary>
        /// <param name="authorUrl">урл автора</param>
        /// <param name="book">книга</param>
        /// <param name="authorName">имя автора</param>
        public void PublishMessageUpdatedBook(AuthorText book, string authorUrl, string authorName)
        {
            var paramJson = new fastJSON.JSONParameters
            {
                UsingGlobalTypes     = false,
                EnableAnonymousTypes = true,
                UseExtensions        = false
            };


            var paramBJson = new fastBinaryJSON.BJSONParameters
            {
                UsingGlobalTypes     = false,
                EnableAnonymousTypes = true,
                UseExtensions        = false
            };


            try
            {
                if (_settings.UseMessageBroker)
                {
                    var transportBookInfo = new TransportBookInfo()
                    {
                        AuthorLink  = authorUrl,
                        AuthorName  = authorName,
                        Description = book.Description,
                        Genres      = book.Genres,
                        Link        = book.Link,
                        Name        = book.Name,
                        SectionName = book.SectionName,
                        Size        = book.Size,
                        UpdateDate  = DateTime.Now.ToUniversalTime().Ticks
                    };
                    var jsonTransportBookInfo = fastBinaryJSON.BJSON.Instance.ToBJSON(transportBookInfo, paramBJson);// fastJSON.JSON.Instance.ToJSON(transportBookInfo);
                    var command = new SubscriptionMessageCommand()
                    {
                        JsonObjectBytes = jsonTransportBookInfo
                    };
                    PublishMessageUpdatedBook(fastJSON.JSON.Instance.ToJSON(command, paramJson));
                }
            }
            catch (Exception ex)
            {
                //_logger.Add("Остановлен сервис подписки на push-уведомления об обновлениях.");
            }
        }
Ejemplo n.º 2
0
        private static bool ProcessArrivedBook(TransportBookInfo book, bool isMyInfo)
        {
            if (book == null || string.IsNullOrWhiteSpace(book.AuthorLink))
            {
                return(true);
            }
            if (Authors == null)
            {
                return(true);
            }
            var author = Authors.FindAuthor(book.AuthorLink);

            if (author == null)
            {
                return(true);
            }
            var alreadyStared = author.IsNew;

            if (author.IsIgnored || author.IsDeleted)
            {
                return(true);
            }
            var authorText = author.Texts.FirstOrDefault(t => t.Link == book.Link);
            // Link  у нас - относительный путь, поэтому не преобразовываем
            bool isNew     = false;
            bool isUpdated = false;

            var convertedTime = new DateTime(book.UpdateDate, DateTimeKind.Utc).ToLocalTime();


            if (isMyInfo)
            {
                if (authorText == null)
                {
                    return(true);
                }
                // просто маркируем свои штампы серверным, не меняя локальные даты проверок
                authorText.ServerStamp = book.UpdateDate;
                author.ServerStamp     = book.UpdateDate;
            }
            else
            {
                if (authorText == null)
                {
                    authorText = new AuthorText();
                    isNew      = true;
                }
                if (authorText.ServerStamp > book.UpdateDate)
                {
                    return(true);
                }

                if (!isNew)
                {
                    book.Size = book.Size < 0 ? 0 : book.Size; // кооректируем, иногда бывает -1
                    isUpdated = ((authorText.Name != book.Name || authorText.Size != book.Size ||
                                  (_setting.SkipBookDescription ? false : authorText.Description != book.Description)));
                }
                if (!isNew && !isUpdated)
                {
                    authorText.ServerStamp = book.UpdateDate;// скорректируем локальное значение. поставим серверное
                    return(true);
                }

                _messageBrokerTrayInfoCollectorTimer.Stop();

                authorText.Description = book.Description;
                authorText.Genres      = book.Genres;
                authorText.Link        = book.Link;
                authorText.Name        = book.Name;
                authorText.SectionName = book.SectionName;

                if (!authorText.IsNew)
                {
                    authorText.SizeOld = authorText.Size;
                }

                authorText.Size        = book.Size;
                authorText.UpdateDate  = convertedTime;
                authorText.ServerStamp = book.UpdateDate; // ставим штамп сервера

                authorText.IsNew = true;
                if (isNew)
                {
                    author.Texts.Add(authorText);
                }
                author.LastCheckDate = authorText.UpdateDate;
                try
                {
                    if (author.NextCheckDate < author.LastCheckDate)
                    {
                        var elasticScheduler = new ElasticScheduler(_logger, _setting);
                        elasticScheduler.MakePlan(author);
                        elasticScheduler.SaveStatistics();
                    }
                    author.UpdateDate  = authorText.UpdateDate;
                    author.ServerStamp = book.UpdateDate; // ставим штамп сервера

                    author.IsNew = true;

                    _logger.Add(string.Format("StatServer> Уведомление: обновился {0} ({1})", author.Name, authorText.Name),
                                true, false);
                    if (!_messageBrokerTrayInfo.Contains(author.Name) && !alreadyStared)
                    {
                        _messageBrokerTrayInfo = string.IsNullOrWhiteSpace(_messageBrokerTrayInfo)
                                                     ? author.Name
                                                     : _messageBrokerTrayInfo + "; " + author.Name;
                    }
                    _messageBrokerTrayInfoCollectorTimer.Start();
                }
                catch (Exception ex)
                {
                    _logger.Add(string.Format("Ошибка формирования плана проверок автора {0} - {1}", author.Name, ex));
                }
            }
            return(false);
        }
Ejemplo n.º 3
0
        public void PublishMessageUpdatedBook(Logger logger, Setting settings, AuthorText book, string authorUrl, string authorName)
        {
            if (!settings.UseMessageBroker)
            {
                return;
            }
            CheckProxy(settings);

            var paramBJson = new fastBinaryJSON.BJSONParameters
            {
                UsingGlobalTypes     = false,
                EnableAnonymousTypes = true,
                UseExtensions        = false
            };


            try
            {
                var transportBookInfo = new TransportBookInfo()
                {
                    AuthorLink  = authorUrl,
                    AuthorName  = authorName,
                    Description = book.Description,
                    Genres      = book.Genres,
                    Link        = book.Link,
                    Name        = book.Name,
                    SectionName = book.SectionName,
                    Size        = book.Size,
                    UpdateDate  = DateTime.Now.ToUniversalTime().Ticks
                };
                var jsonTransportBookInfo = fastBinaryJSON.BJSON.Instance.ToBJSON(transportBookInfo, paramBJson);

                var rpc = new JsonRpcClient(_proxy)
                {
                    Url = _apiUrl
                };
                rpc.Invoke <BooleanOperationResult>(
                    new RpcCommand()
                {
                    Method = "SetUpdateInfo", ParametersArray = new object[] { "clientId", SubscriptionManager.CurrentClientId, "jsonObjectBytes", jsonTransportBookInfo, "appId", "slkdjfhsjdfks928347832940hfjdsf982738r9" }
                },
                    (data) =>
                    GetUiControl().InvokeIfRequired(() =>

                {
                    if (data == null)
                    {
                        logger.Add("Не удалось отослать информацию об обновлении серверу статистики SIInformer", true);
                    }
                    else if (data.Result)
                    {
                        // ну, отослали успешно, чо делать-то? Да ничего. :-)
                    }
                    else
                    {
                        logger.Add("Не удалось отослать информацию об обновлении серверу статистики SIInformer: " + data.Error, true);
                    }
                }, DispatcherPriority.Normal), (error) => GetUiControl().InvokeIfRequired(() => logger.Add("Не удалось отослать информацию об обновлении серверу статистики SIInformer: " + error.Message, true), DispatcherPriority.Normal));
            }
            catch (Exception ex)
            {
                logger.Add("Ошибка работы модуля общения с сервером статистики SIInformer: " + ex.Message, true);
            }
        }