Exemplo n.º 1
0
        public async Task Cleanup()
        {
            var config = _provider.QueryModule <IMakabaNetworkConfig>();

            config.BaseUri = null;
            await config.Save();

            await _collection.Dispose();

            _collection = null;
            _provider   = null;
        }
Exemplo n.º 2
0
        public static void AssertNodes(IModuleProvider modules, IPostNode original, IPostNode deserialized, int[] path = null, Action <IPostNode, IPostNode> assertCallback = null)
        {
            var p = path != null?path.Aggregate(new StringBuilder(), (sb, n) => (sb.Length > 0 ? sb.Append("/") : sb).Append(n)).ToString() : "";

            if (original == null)
            {
                Assert.IsNull(deserialized, $"{p} Объект должен быть null");
            }
            else
            {
                Assert.IsNotNull(deserialized, $"{p} Объект не должен быть null");
                Assert.AreEqual(original.GetType(), deserialized.GetType(), $"{p} Тип объекта не совпадает");
                Assert.AreNotSame(original, deserialized, "Должны быть разные объекты");
                switch (original)
                {
                case TextPostNode ot:
                    var dt = (TextPostNode)deserialized;
                    Assert.AreEqual(ot.Text, dt.Text, $"{p} Текст не совпадает");
                    break;

                case BoardLinkPostNode obl:
                    var dbl = (BoardLinkPostNode)deserialized;
                    Assert.AreEqual(obl.BoardLink?.GetLinkHash(), dbl.BoardLink?.GetLinkHash(), $"{p} Ссылка не совпадает");
                    break;

                case CompositePostNode oc:
                    var dc  = (CompositePostNode)deserialized;
                    var oat = modules.QueryModule <IObjectSerializationService>().SerializeToString(oc.Attribute);
                    var dat = modules.QueryModule <IObjectSerializationService>().SerializeToString(dc.Attribute);
                    Assert.AreEqual(oat, dat, $"{p} Атрибут узла не совпадает");
                    if (oc.Children == null)
                    {
                        Assert.IsNull(dc.Children, $"{p} Список дочерних атрибутов должен быть null");
                    }
                    else
                    {
                        Assert.IsNotNull(dc.Children, $"{p} Список дочерних узлов не должен быть null");
                        Assert.AreEqual(oc.Children.Count, dc.Children.Count, $"{p} Количество дочерних узлов не совпадает");
                        for (var i = 0; i < dc.Children.Count; i++)
                        {
                            AssertNodes(modules, oc.Children[i], dc.Children[i], (path ?? new int[0]).Concat(new [] { i + 1 }).ToArray(), assertCallback);
                        }
                    }
                    break;
                }
                assertCallback?.Invoke(original, deserialized);
            }
        }
Exemplo n.º 3
0
        public async Task Initilize(int parallelTasks)
        {
            _collection = new ModuleCollection();

            ModelsRegistration.RegisterModules(_collection);
            PostModelsRegistration.RegisterModules(_collection);
            _collection.RegisterModule <EsentInstanceProvider, IEsentInstanceProvider>(new EsentInstanceProvider(true));
            _collection.RegisterModule <PostModelStore, IBoardPostStore>(new PostModelStore("makaba", parallelTasks));
            _collection.RegisterModule <MakabaBoardReferenceDtoParsers, INetworkDtoParsers>();
            _collection.RegisterModule <MakabaBoardReferenceDtoParsers, INetworkDtoParsers>();
            _collection.RegisterModule <YoutubeIdService, IYoutubeIdService>();
            _collection.RegisterModule <MakabaLinkParser, IEngineLinkParser>();
            _collection.RegisterModule <AgilityHtmlDocumentFactory, IHtmlDocumentFactory>();
            _collection.RegisterModule <MakabaHtmlParser, IHtmlParser>();
            _collection.RegisterModule <MakabaPostDtoParsers, INetworkDtoParsers>();
            MakabaModelsRegistration.RegisterModules(_collection);

            TableVersionStatusForTests.ClearInstance();
            await _collection.Seal();

            _provider = _collection.GetModuleProvider();
            var module = _provider.QueryModule(typeof(IBoardPostStore), "makaba") ?? throw new ModuleNotFoundException();

            _store = module.QueryView <IBoardPostStore>() ?? throw new ModuleNotFoundException();
        }
Exemplo n.º 4
0
        /// <summary>
        /// Запросить модуль.
        /// </summary>
        /// <typeparam name="T">Тип интерфейса.</typeparam>
        /// <typeparam name="TQuery">Тип запроса.</typeparam>
        /// <param name="provider">Провайдер.</param>
        /// <param name="query">Запрос.</param>
        /// <returns>Модуль.</returns>
        public static T QueryModule <T, TQuery>(this IModuleProvider provider, TQuery query)
            where T : class
        {
            var obj = provider.QueryModule(typeof(T), query);

            return(obj as T ?? obj?.QueryView <T>());
        }
        /// <summary>
        /// Сериализовать во внешний контракт.
        /// </summary>
        /// <param name="modules">Модули.</param>
        /// <param name="obj">Объект.</param>
        /// <returns>Внешний контракт.</returns>
        public static TExtern SerializeToExternalContract <T, TBase, TExtern>(this IModuleProvider modules, T obj)
            where TBase : ISerializableObject
            where T : ISerializableObject
            where TExtern : class, TBase, IExternalContractHost, new()
        {
            if (modules == null)
            {
                throw new ArgumentNullException(nameof(modules));
            }
            if (obj == null)
            {
                return(null);
            }
            var t          = obj.GetTypeForSerializer();
            var serializer = modules.QueryModule <IObjectSerializationService, object>(null).FindSerializer(t);
            var bytes      = serializer.SerializeToBytes(obj);

            return(new TExtern()
            {
                Contract = new ExternalContractData()
                {
                    BinaryData = bytes != null?Convert.ToBase64String(bytes) : null,
                                     TypeId = serializer.TypeId,
                }
            });
        }
Exemplo n.º 6
0
        /// <summary>
        /// Запросить модуль.
        /// </summary>
        /// <typeparam name="T">Тип интерфейса.</typeparam>
        /// <param name="provider">Провайдер.</param>
        /// <returns>Модуль.</returns>
        public static T QueryModule <T>(this IModuleProvider provider)
            where T : class
        {
            var obj = provider.QueryModule <object>(typeof(T), null);

            return(obj as T ?? obj?.QueryView <T>());
        }
Exemplo n.º 7
0
 /// <summary>
 /// Запросить операцию сетевого движка.
 /// </summary>
 /// <typeparam name="TIntf">Интерфейс операции.</typeparam>
 /// <param name="provider">Провайдер.</param>
 /// <param name="engineId">Движок.</param>
 /// <returns>Операция (если найдена).</returns>
 public static TIntf QueryEngineCapability <TIntf>(this IModuleProvider provider, string engineId)
     where TIntf : class, INetworkEngineCapability
 {
     return(provider.QueryModule <TIntf, EngineCapabilityQuery>(new EngineCapabilityQuery()
     {
         EngineId = engineId
     }));
 }
Exemplo n.º 8
0
        private void TestMediaModelSerialization <T>(Func <T> createModel, Action <T, T> asserts)
            where T : IPostMedia
        {
            var m        = createModel();
            var provider = _modules.QueryModule <IObjectSerializationService>();

            Assert.IsNotNull(provider, "Средство сериализации не найдено");

            var str = provider.SerializeToString(m);
            var m2  = provider.Deserialize(str) as IPostMedia;

            CheckMediaModelsSerialization(m, m2, asserts);

            var bytes = provider.SerializeToBytes(m);
            var m3    = provider.Deserialize(bytes) as IPostMedia;

            CheckMediaModelsSerialization(m, m3, asserts);
        }
Exemplo n.º 9
0
        internal void AfterDeserialize(IModuleProvider moduleProvider)
        {
            var linkSerialization = moduleProvider.QueryModule <ILinkSerializationService>() ?? throw new ModuleNotFoundException(typeof(ILinkSerializationService));

            if (Contracts == null)
            {
                throw new SerializationException("MakabaEntityInfoModel: Неправильное содержимое сериализованных данных.");
            }

            BoardInfo = moduleProvider.ValidateAfterDeserialize <PostDocument, IPostDocument, PostDocumentExternalContract>(Contracts.BoardInfo);
            if (Contracts.HasBannerSize)
            {
                BannerSize = new SizeOfInt32()
                {
                    Width = Contracts.BannerWidth, Height = Contracts.BannerHeight
                };
            }
            else
            {
                BannerSize = null;
            }
            BannerImageLink = linkSerialization.Deserialize(Contracts.BannerImageLink);
            BannerBoardLink = linkSerialization.Deserialize(Contracts.BannerBoardLink);
            Icons           = Contracts.Icons?.Select(i => i != null ? new BoardIcon()
            {
                Id        = i.Id,
                Name      = i.Name,
                MediaLink = linkSerialization.Deserialize(i.MediaLink)
            } : null).OfType <IBoardIcon>().ToList();
            Pages     = Contracts.Pages;
            NewsItems = Contracts.NewsItems?.Select(i => i != null ? new MakabaBoardPostCollectionInfoNewsItem()
            {
                Date     = i.Date,
                Title    = i.Title,
                NewsLink = linkSerialization.Deserialize(i.NewsLink)
            } : null).OfType <IBoardPostCollectionInfoNewsItem>().ToList();
            AdvertisementItems = Contracts.AdvertisementItems?.Select(i => i != null ? new MakabaBoardPostCollectionInfoBoardsAdvertisementItem()
            {
                BoardLink = linkSerialization.Deserialize(i.BoardLink),
                Name      = i.Name,
                Info      = i.Info
            } : null).OfType <IBoardPostCollectionInfoBoardsAdvertisementItem>().ToList();
            AdvertisementBannerLink = linkSerialization.Deserialize(Contracts.AdvertisementBannerLink);
            AdvertisementClickLink  = linkSerialization.Deserialize(Contracts.AdvertisementClickLink);
            Flags = Contracts.Flags;

            Contracts = null;
            if (_infoSet == null)
            {
                var r = new List <IBoardPostCollectionInfo>()
                {
                    this
                };
                _infoSet = r.AsReadOnly();
            }
        }
Exemplo n.º 10
0
        /// <summary>
        /// Найти парсер сетевого Dto.
        /// </summary>
        /// <typeparam name="TIn">Тип входных данных.</typeparam>
        /// <typeparam name="TOut">Тип результата.</typeparam>
        /// <param name="provider">Провайдер модулей.</param>
        /// <returns>Парсер.</returns>
        public static INetworkDtoParser <TIn, TOut> FindNetworkDtoParser <TIn, TOut>(this IModuleProvider provider)
        {
            if (provider == null)
            {
                throw new ArgumentNullException(nameof(provider));
            }
            var parserType = typeof(INetworkDtoParser <TIn, TOut>);
            var parsers    = provider.QueryModule <INetworkDtoParsers, Type>(parserType);

            return(parsers as INetworkDtoParser <TIn, TOut> ?? parsers?.QueryView <INetworkDtoParser <TIn, TOut> >());
        }
Exemplo n.º 11
0
        /// <summary>
        /// Конвертировать HTML в текст.
        /// </summary>
        /// <param name="provider">Провайдер модулей.</param>
        /// <param name="html">Текст html.</param>
        /// <returns></returns>
        public static string ConvertHtmlToText(IModuleProvider provider, string html)
        {
            var d = provider.QueryModule <IHtmlDocumentFactory, object>(null) ?? throw new ModuleNotFoundException(typeof(IHtmlDocumentFactory));

            IHtmlDocument doc = d.Load(html);

            StringWriter sw = new StringWriter();

            ConvertHtmlToText(doc.DocumentNode, sw, d);
            sw.Flush();
            return(sw.ToString());
        }
Exemplo n.º 12
0
 /// <summary>
 /// Десериализовать ссылку.
 /// </summary>
 /// <param name="modules">Модули.</param>
 /// <param name="linkStr">Строка ссылки.</param>
 /// <returns>Ссылка.</returns>
 public static ILink DeserializeLink(this IModuleProvider modules, string linkStr)
 {
     if (modules == null)
     {
         throw new ArgumentNullException(nameof(modules));
     }
     if (linkStr == null)
     {
         return(null);
     }
     return((modules.QueryModule <ILinkSerializationService>() ?? throw new ModuleNotFoundException(typeof(ILinkSerializationService)))
            .Deserialize(linkStr));
 }
Exemplo n.º 13
0
        /// <summary>
        /// Десериализовать из внешнего контракта.
        /// </summary>
        /// <param name="modules">Модули.</param>
        /// <param name="contract">Контракт.</param>
        /// <returns>Объект.</returns>
        public static TBase DeserializeExternalContract <TBase, TExtern>(this IModuleProvider modules, TExtern contract)
            where TBase : class, ISerializableObject
            where TExtern : class, IExternalContractHost
        {
            if (contract?.Contract?.BinaryData == null)
            {
                return(null);
            }
            var serializer = modules.QueryModule <IObjectSerializationService, object>(null).FindSerializer(contract.Contract.TypeId);
            var bytes      = contract.Contract.BinaryData != null?Convert.FromBase64String(contract.Contract.BinaryData) : null;

            return(serializer.Deserialize(bytes) as TBase);
        }
Exemplo n.º 14
0
        /// <summary>
        /// Клонировать ссылку.
        /// </summary>
        /// <param name="link">Ссылка.</param>
        /// <param name="modules">Модули.</param>
        /// <returns>Клонированная ссылка.</returns>
        public static ILink CloneLink(this ILink link, IModuleProvider modules)
        {
            if (modules == null)
            {
                throw new ArgumentNullException(nameof(modules));
            }
            if (link == null)
            {
                return(null);
            }
            if (link is IDeepCloneable <BoardLinkBase> dc)
            {
                return(dc.DeepClone(modules));
            }
            var serializer = modules.QueryModule <ILinkSerializationService>() ?? throw new ModuleNotFoundException(typeof(ILinkSerializationService));

            return(serializer.Deserialize(serializer.Serialize(link)));
        }
Exemplo n.º 15
0
        public async Task Initialize()
        {
            _collection = new ModuleCollection();

            LinkModelsRegistration.RegisterModules(_collection);
            CommonSerializationRegistration.RegisterModules(_collection);
            _collection.RegisterModule <EsentInstanceProvider, IEsentInstanceProvider>(new EsentInstanceProvider(true));
            _collection.RegisterModule <BlobsModelStore, IBlobsModelStore>();
            _collection.RegisterModule <MakabaBoardReferenceDtoParsers, INetworkDtoParsers>();

            TableVersionStatusForTests.ClearInstance();
            await _collection.Seal();

            _provider = _collection.GetModuleProvider();
            var module = _provider.QueryModule <object>(typeof(IBlobsModelStore), null) ?? throw new ModuleNotFoundException();

            _store = module.QueryView <IBlobsModelStore>() ?? throw new ModuleNotFoundException();
        }
Exemplo n.º 16
0
        /// <summary>
        /// Сериализовать во внешний контракт.
        /// </summary>
        /// <param name="modules">Модули.</param>
        /// <param name="obj">Объект.</param>
        /// <returns>Внешний контракт.</returns>
        public static TBase ValidateAfterDeserialize <T, TBase, TExtern>(this IModuleProvider modules, T obj)
            where T : class, ISerializableObject
            where TBase : class, ISerializableObject
            where TExtern : class, IExternalContractHost
        {
            if (modules == null)
            {
                throw new ArgumentNullException(nameof(modules));
            }
            if (obj == null)
            {
                return(null);
            }
            var t          = obj.GetTypeForSerializer();
            var serializer = modules.QueryModule <IObjectSerializationService, object>(null).FindSerializer(t);

            if (obj is TExtern)
            {
                return(DeserializeExternalContract <TBase, TExtern>(modules, obj as TExtern));
            }
            return(serializer.AfterDeserialize(obj) as TBase);
        }
Exemplo n.º 17
0
        internal void BeforeSerialize(IModuleProvider moduleProvider)
        {
            var linkSerialization = moduleProvider.QueryModule <ILinkSerializationService>() ?? throw new ModuleNotFoundException(typeof(ILinkSerializationService));

            Contracts = new MakabaEntittyInfoModelContracts()
            {
                BoardInfo       = moduleProvider.ValidateBeforeSerialize <IPostDocument, PostDocument, PostDocumentExternalContract>(BoardInfo),
                HasBannerSize   = BannerSize != null,
                BannerWidth     = BannerSize != null ? BannerSize.Value.Width : 0,
                BannerHeight    = BannerSize != null ? BannerSize.Value.Height : 0,
                BannerImageLink = linkSerialization.Serialize(BannerImageLink),
                BannerBoardLink = linkSerialization.Serialize(BannerBoardLink),
                Icons           = Icons?.Select(i => i != null ? new BoardIconContract()
                {
                    Id        = i.Id,
                    Name      = i.Name,
                    MediaLink = linkSerialization.Serialize(i.MediaLink)
                } : null)?.ToList(),
                Pages     = Pages?.ToList(),
                NewsItems = NewsItems?.Select(i => i != null ? new MakabaBoardPostCollectionInfoNewsItemContract()
                {
                    Date     = i.Date,
                    NewsLink = linkSerialization.Serialize(i.NewsLink),
                    Title    = i.Title
                } : null)?.ToList(),
                AdvertisementItems = AdvertisementItems?.Select(i => i != null ? new MakabaBoardPostCollectionInfoBoardsAdvertisementItemContract()
                {
                    Info      = i.Info,
                    Name      = i.Name,
                    BoardLink = linkSerialization.Serialize(i.BoardLink)
                } : null)?.ToList(),
                AdvertisementBannerLink = linkSerialization.Serialize(AdvertisementBannerLink),
                AdvertisementClickLink  = linkSerialization.Serialize(AdvertisementClickLink),
                Flags = Flags?.ToList()
            };
        }