protected virtual void PublishTextContent(ref IncomingQueue queueItem)
        {
            var site = queueItem.Site;

            if (site != null)
            {
                var repository = site.GetRepository();
                if (repository != null)
                {
                    switch (queueItem.Action)
                    {
                    case PublishingAction.Publish:
                        AddOrUpdateContent(repository, queueItem);
                        return;

                    case PublishingAction.Unbpulish:
                        var integrateId = new ContentIntegrateId(queueItem.ObjectUUID);
                        var textFolder  = new TextFolder(repository, integrateId.FolderName).AsActual();
                        if (textFolder != null)
                        {
                            _textContentManager.Delete(repository, textFolder, integrateId.ContentUUID);
                            return;
                        }
                        break;

                    case PublishingAction.None:
                    default:
                        return;
                    }
                }
            }
            NoSuchSiteMessage(ref queueItem);
        }
Exemple #2
0
        public string UpdateTextContent(Site site, TextFolder textFolder, string uuid, System.Collections.Specialized.NameValueCollection values, [System.Runtime.InteropServices.OptionalAttribute][System.Runtime.InteropServices.DefaultParameterValueAttribute("")] string userid, string vendor)
        {
            var schema      = textFolder.GetSchema();
            var textContent = new TextContent(textFolder.Repository.Name, textFolder.SchemaName, textFolder.FullName);

            textContent = _textContentBinder.Bind(schema, textContent, values);

            IncomingQueue incomeQueue = new IncomingQueue()
            {
                Message          = null,
                Object           = new Dictionary <string, object>(textContent),
                ObjectUUID       = textContent.IntegrateId,
                ObjectTitle      = textContent.GetSummary(),
                Vendor           = vendor,
                PublishingObject = PublishingObject.TextContent,
                Action           = PublishingAction.Publish,
                SiteName         = site.FullName,
                Status           = QueueStatus.Pending,
                UtcCreationDate  = DateTime.UtcNow,
                UtcProcessedTime = null,
                UUID             = Kooboo.UniqueIdGenerator.GetInstance().GetBase32UniqueId(10)
            };

            _incomeQueueProvider.Add(incomeQueue);

            return(textContent.IntegrateId);
        }
Exemple #3
0
        public void DeleteTextContent(Site site, TextFolder textFolder, string uuid, string vendor)
        {
            var integrateId = new ContentIntegrateId(uuid);
            var content     = textFolder.CreateQuery().WhereEquals("UUID", integrateId.ContentUUID).FirstOrDefault();

            if (content != null)
            {
                IncomingQueue incomeQueue = new IncomingQueue()
                {
                    Message          = null,
                    Object           = null,
                    ObjectUUID       = uuid,
                    ObjectTitle      = content.GetSummary(),
                    Vendor           = vendor,
                    PublishingObject = PublishingObject.TextContent,
                    Action           = PublishingAction.Unbpulish,
                    SiteName         = site.FullName,
                    Status           = QueueStatus.Pending,
                    UtcCreationDate  = DateTime.UtcNow,
                    UtcProcessedTime = null,
                    UUID             = Kooboo.UniqueIdGenerator.GetInstance().GetBase32UniqueId(10)
                };
                _incomeQueueProvider.Add(incomeQueue);
            }
        }
Exemple #4
0
        protected virtual void AddLog(IncomingQueue queueItem, QueueStatus logStatus, Exception e = null)
        {
            PublishingLog log = new PublishingLog()
            {
                UUID             = Kooboo.UniqueIdGenerator.GetInstance().GetBase32UniqueId(20),
                QueueType        = QueueType.Incoming,
                QueueUUID        = queueItem.UUID,
                ObjectTitle      = queueItem.ObjectTitle,
                SiteName         = queueItem.SiteName,
                PublishingObject = queueItem.PublishingObject,
                ObjectUUID       = queueItem.ObjectUUID,
                //PublishingType = PublishingType.Remote,
                RemoteEndpoint    = null,
                TextFolderMapping = null,
                UserId            = queueItem.Vendor,
                Status            = logStatus,
                Vendor            = queueItem.Vendor,
                UtcProcessedTime  = queueItem.UtcProcessedTime,
                Message           = e == null ? queueItem.Message : e.Message,
                StackTrace        = e == null ? "" : e.StackTrace,
                PublishingAction  = queueItem.Action,
                QueueObject       = queueItem
            };

            _publishingLogProvider.Add(log);
        }
        private void AddOrUpdateContent(Repository repository, IncomingQueue queueItem)
        {
            var textContent        = (Dictionary <string, object>)queueItem.Object;
            var values             = textContent.ToNameValueCollection();
            var files              = values.GetFilesFromValues();
            var medias             = values.GetMediaFromValues();
            var newVirtualPathDict = new Dictionary <string, string>();

            for (int i = 0, len = medias.Count; i < len; i++)
            {
                var virtualPath = this._repositoryNameRegex.Replace(medias[i].FileName, string.Format("$1{0}$3", repository.Name));
                var folder      = this._repositoryNameRegex.Match(virtualPath).Groups["mediaFolder"].Value;

                if (!string.IsNullOrWhiteSpace(virtualPath))
                {
                    newVirtualPathDict.Add(medias[i].FileName, virtualPath);

                    var physicalPath = Kooboo.Web.Url.UrlUtility.MapPath(virtualPath);

                    var mediaFolder = new MediaFolder(repository, folder);
                    if (mediaFolder.AsActual() == null)
                    {
                        this._mediaFolderManager.Add(repository, mediaFolder);
                    }

                    var folderPath = Path.GetDirectoryName(physicalPath);

                    var fileName = Path.GetFileName(physicalPath);

                    this._mediaContentManager.Add(repository, mediaFolder,
                                                  fileName, medias[i].InputStream, false);
                }
            }

            foreach (var prop in values.AllKeys)
            {
                if (!prop.StartsWith("__"))
                {
                    if (values[prop] != null && values[prop] is string && this._mediaPathField.IsMediaPathField(values[prop].ToString()))
                    {
                        var fieldValue = values[prop].ToString();
                        foreach (var key in newVirtualPathDict.Keys)
                        {
                            fieldValue = fieldValue.Replace(key, newVirtualPathDict[key]);
                        }
                        values[prop] = fieldValue;
                    }
                }
            }

            var categories = values.GetCategories().Select(it => new TextContent(repository.Name, "", it.CategoryFolder)
            {
                UUID = it.CategoryUUID
            }).ToArray();

            var textFolder = new TextFolder(repository, values["FolderName"]);

            _textContentManager.Delete(repository, textFolder, values["UUID"]);
            _textContentManager.Add(textFolder.Repository, textFolder, values, files, categories, values["UserId"]);
        }
 /// <summary>
 /// Queues to cache. This method is non-blocking, use SaveToCache for a blocking method.
 /// </summary>
 public static void QueueToCache(byte[] fileData)
 {
     if (SettingsSystem.CurrentSettings.EnableCache)
     {
         IncomingQueue.Enqueue(fileData);
         IncomingEvent.Set();
     }
 }
Exemple #7
0
 public virtual void Delete(string[] uuids)
 {
     foreach (string uuid in uuids)
     {
         var model = new IncomingQueue(uuid).AsActual();
         this._incomeQueueProvider.Remove(model);
     }
 }
        public void LookAheadOnDeterministicIsCorrect()
        {
            var queue = IncomingQueue.GetQueue(GameRules.ClassicRules, t3, t1, t0);

            Assert.AreEqual(t3, queue.Incoming()[0]);
            Assert.AreEqual(t1, queue.Incoming()[1]);
            Assert.AreEqual(t0, queue.Incoming()[2]);
        }
        public void NextInClassicIsExpected()
        {
            var queue = IncomingQueue.GetQueue(GameRules.ClassicRules, t0, t1, t2);

            Assert.AreEqual(t0, queue.Next());
            Assert.AreEqual(t1, queue.Next());
            Assert.AreEqual(t2, queue.Next());
            Assert.AreEqual(t0, queue.Next());
        }
        public void LookAheadGoesBackAfterUndo()
        {
            var types = PieceType.GetRange(0, 3);
            var queue = IncomingQueue.GetQueue(GameRules.ClassicRules, types);

            CollectionAssert.AreEqual(types, queue.Incoming());
            queue.Next();
            queue.Undo();
            CollectionAssert.AreEqual(types, queue.Incoming());
        }
 public virtual void Delete(Site site, string[] uuids)
 {
     foreach (string uuid in uuids)
     {
         var model = new IncomingQueue(site, uuid).AsActual();
         if (model != null)
         {
             this._incomeQueueProvider.Remove(model);
         }
     }
 }
        public virtual void ProcessQueueItem(IncomingQueue queueItem)
        {
            Exception   exception = null;
            QueueStatus logStatus = QueueStatus.OK;

            try
            {
                queueItem.UtcProcessedTime = DateTime.UtcNow;

                switch (queueItem.PublishingObject)
                {
                case PublishingObject.Page:
                    PublishPage(ref queueItem);
                    break;

                case PublishingObject.TextContent:
                    PublishTextContent(ref queueItem);
                    break;

                default:
                    break;
                }
                queueItem.Status = QueueStatus.Processed;

                if (queueItem.Status == QueueStatus.Warning)
                {
                    logStatus = QueueStatus.Warning;
                }
                else
                {
                    logStatus = QueueStatus.OK;
                }
            }
            catch (Exception e)
            {
                Kooboo.HealthMonitoring.Log.LogException(e);
                queueItem.Status  = QueueStatus.Warning;
                logStatus         = QueueStatus.Warning;
                exception         = e;
                queueItem.Message = e.Message;
            }

            if (queueItem.Status == QueueStatus.Processed)
            {
                _incomeQueueProvider.Remove(queueItem);
            }
            else
            {
                _incomeQueueProvider.Update(queueItem, queueItem);
            }

            AddLog(queueItem, logStatus, exception);
        }
        public void IncomingDoesNotAffectNext()
        {
            var types = new PieceType[] { t1, t2, t3 };
            var queue = IncomingQueue.GetQueue(GameRules.ClassicRules, types);

            CollectionAssert.AreEqual(types, queue.Incoming());
            Assert.AreEqual(t1, queue.Next());
            Assert.AreEqual(t2, queue.Next());
            Assert.AreEqual(t3, queue.Next());
            Assert.AreEqual(t1, queue.Next());
            Assert.AreEqual(t2, queue.Next());
            CollectionAssert.AreEqual(new PieceType[] { t3, t1, t2 }, queue.Incoming());
            Assert.AreEqual(t3, queue.Next());
        }
Exemple #14
0
 private void ProcessingThreadMain()
 {
     while (true)
     {
         byte[] incomingBytes;
         if (IncomingQueue.TryDequeue(out incomingBytes))
         {
             SaveToCache(incomingBytes);
         }
         else
         {
             IncomingEvent.WaitOne(500);
         }
     }
 }
        public void OnlyMatchNoneReturned()
        {
            var types = PieceType.GetRange(0, 4);
            var queue = IncomingQueue.GetQueue(new GameRules {
                NextTypePolicy    = NextTypePolicy.Random,
                MatchAllWeight    = 0,
                MatchNoneWeight   = 1,
                OtherPiecesWeight = 0
            }, types);

            for (int i = 0; i < 100; i++)
            {
                Assert.AreEqual(PieceType.MatchNone, queue.Next());
            }
        }
        public void OnlyExpectedPiecesReturnedInRandom()
        {
            var types = PieceType.GetRange(0, 4);
            var queue = IncomingQueue.GetQueue(new GameRules {
                NextTypePolicy    = NextTypePolicy.Random,
                MatchAllWeight    = 0,
                MatchNoneWeight   = 0,
                OtherPiecesWeight = 100
            }, types);

            for (int i = 0; i < 100; i++)
            {
                Assert.Contains(queue.Next(), types);
            }
        }
        public void DeletePage(Site site, string pageId, string vendor)
        {
            IncomingQueue incomeQueue = new IncomingQueue(site, Kooboo.UniqueIdGenerator.GetInstance().GetBase32UniqueId(10))
            {
                Message          = null,
                Object           = null,
                ObjectUUID       = pageId,
                ObjectTitle      = pageId,
                Vendor           = vendor,
                PublishingObject = PublishingObject.Page,
                Action           = PublishingAction.Unbpulish,
                Status           = QueueStatus.Pending,
                UtcCreationDate  = DateTime.UtcNow,
                UtcProcessedTime = null
            };

            _incomeQueueProvider.Add(incomeQueue);
        }
Exemple #18
0
 protected virtual void AttendIncomingQueue()
 {
     try
     {
         foreach (IQueueable <T> message in IncomingQueue.GetConsumingEnumerable(LongRunningTask.CancellationTokenSource.Token))
         {
             Log.Log(LogCatagory.Info, "{0} recieved message with QueueId: {1}", ModuleName, message.QueueId);
             OnIncomingMessage(message);
             Log.Log(LogCatagory.Info, "{0} finished processing message with QueueId: {1}.", ModuleName, message.QueueId);
         }
     }
     catch (OperationCanceledException)
     {
         Log.Log(LogCatagory.Info, "{0} shutting down.", ModuleName);
     }
     catch (Exception e)
     {
         Log.Log(LogCatagory.Error, e, "{0}: Unexpected exception caught while attending incoming queue.", ModuleName);
     }
 }
        public void ReturnsExpectedPiecesAndSpecials()
        {
            var types = PieceType.GetRange(0, 4);
            var queue = IncomingQueue.GetQueue(new GameRules {
                NextTypePolicy    = NextTypePolicy.Random,
                MatchAllWeight    = 20,
                MatchNoneWeight   = 10,
                OtherPiecesWeight = 100
            }, types);

            var allTypes = new List <PieceType>(types);

            allTypes.Add(PieceType.MatchAll);
            allTypes.Add(PieceType.MatchNone);

            for (int i = 0; i < 100; i++)
            {
                Assert.Contains(queue.Next(), allTypes);
            }
        }
        protected virtual void PublishPage(ref IncomingQueue queueItem)
        {
            var  site = queueItem.Site;
            Page page;

            if (site != null)
            {
                switch (queueItem.Action)
                {
                case PublishingAction.Publish:
                    var pageProperties = (Page)queueItem.Object;

                    page = new Page(site, queueItem.ObjectUUID);

                    MapProperties(pageProperties, page);

                    if (page.Exists())
                    {
                        _pageManager.Remove(site, page);
                    }
                    _pageManager.Add(site, page);
                    break;

                case PublishingAction.Unbpulish:
                    var pageId = queueItem.ObjectUUID;
                    page = new Page(site, pageId);
                    _pageManager.Remove(site, page);
                    break;

                case PublishingAction.None:
                    break;

                default:
                    break;
                }
            }
            else
            {
                NoSuchSiteMessage(ref queueItem);
            }
        }
        public void UndoReturnsToExpectedState()
        {
            var types = PieceType.GetRange(0, 3);
            var queue = IncomingQueue.GetQueue(GameRules.ClassicRules, types);

            Assert.AreEqual(t0, queue.Next());
            queue.Undo();
            Assert.AreEqual(t0, queue.Next());
            Assert.AreEqual(t1, queue.Next());
            queue.Undo();
            Assert.AreEqual(t1, queue.Next());
            Assert.AreEqual(t2, queue.Next());
            queue.Undo();
            Assert.AreEqual(t2, queue.Next());
            Assert.AreEqual(t0, queue.Next());
            queue.Undo();
            Assert.AreEqual(t0, queue.Next());
            queue.Undo();
            queue.Undo();
            Assert.AreEqual(t2, queue.Next());
        }
        public string AddTextContent(Site site, TextFolder textFolder, System.Collections.Specialized.NameValueCollection values, [System.Runtime.InteropServices.OptionalAttribute][System.Runtime.InteropServices.DefaultParameterValueAttribute("")] string userid, string vendor)
        {
            var schema = textFolder.GetSchema();

            var textContent = new TextContent();

            foreach (string key in values)
            {
                textContent[key] = values[key];
            }
            textContent.Repository = textFolder.Repository.Name;
            textContent.SchemaName = textFolder.SchemaName;
            textContent.FolderName = textFolder.FullName;

            if (!string.IsNullOrEmpty(values["UUID"]))
            {
                textContent.UUID = values["UUID"];
            }
            textContent = _textContentBinder.Bind(schema, textContent, values, true, false);


            IncomingQueue incomeQueue = new IncomingQueue(site, Kooboo.UniqueIdGenerator.GetInstance().GetBase32UniqueId(10))
            {
                Message          = null,
                Object           = new Dictionary <string, object>(textContent),
                ObjectUUID       = textContent.IntegrateId,
                ObjectTitle      = textContent.GetSummary(),
                Vendor           = vendor,
                PublishingObject = PublishingObject.TextContent,
                Action           = PublishingAction.Publish,
                Status           = QueueStatus.Pending,
                UtcCreationDate  = DateTime.UtcNow,
                UtcProcessedTime = null
            };

            _incomeQueueProvider.Add(incomeQueue);

            return(textContent.IntegrateId);
        }
Exemple #23
0
        public string UpdatePage(Site site, Page page, string vendor)
        {
            IncomingQueue incomeQueue = new IncomingQueue()
            {
                Message          = null,
                Object           = page,
                ObjectUUID       = page.FullName,
                ObjectTitle      = page.FullName,
                Vendor           = vendor,
                PublishingObject = PublishingObject.Page,
                Action           = PublishingAction.Publish,
                SiteName         = site.FullName,
                Status           = QueueStatus.Pending,
                UtcCreationDate  = DateTime.UtcNow,
                UtcProcessedTime = null,
                UUID             = Kooboo.UniqueIdGenerator.GetInstance().GetBase32UniqueId(10)
            };

            _incomeQueueProvider.Add(incomeQueue);

            return(page.FullName);
        }
        public void LookAheadHasExpectedSize()
        {
            var queue = IncomingQueue.GetQueue(GameRules.ClassicRules, t3, t1, t0);

            Assert.AreEqual(3, queue.LookAheadSize());
            queue = IncomingQueue.GetQueue(GameRules.ClassicRules, PieceType.GetRange(0, 100));
            Assert.AreEqual(100, queue.LookAheadSize());

            queue = IncomingQueue.GetQueue(new GameRules {
                NextTypePolicy = NextTypePolicy.Random,
                MatchAllWeight = 0, MatchNoneWeight = 0, OtherPiecesWeight = 100,
            }, PieceType.GetRange(0, 37));
            Assert.AreEqual(37, queue.LookAheadSize());
            queue = IncomingQueue.GetQueue(new GameRules {
                NextTypePolicy = NextTypePolicy.Random,
                MatchAllWeight = 1, MatchNoneWeight = 0, OtherPiecesWeight = 100,
            }, PieceType.GetRange(0, 37));
            Assert.AreEqual(38, queue.LookAheadSize());
            queue = IncomingQueue.GetQueue(new GameRules {
                NextTypePolicy = NextTypePolicy.Random,
                MatchAllWeight = 0, MatchNoneWeight = 0, OtherPiecesWeight = 100,
            }, PieceType.GetRange(0, 37));
            Assert.AreEqual(37, queue.LookAheadSize());
            queue = IncomingQueue.GetQueue(new GameRules {
                NextTypePolicy = NextTypePolicy.Random,
                MatchAllWeight = 1, MatchNoneWeight = 1, OtherPiecesWeight = 100,
            }, PieceType.GetRange(0, 37));
            queue = IncomingQueue.GetQueue(new GameRules {
                NextTypePolicy = NextTypePolicy.Random,
                MatchAllWeight = 10, MatchNoneWeight = 10, OtherPiecesWeight = 0,
            }, PieceType.GetRange(0, 37));
            Assert.AreEqual(2, queue.LookAheadSize());

            queue = IncomingQueue.GetQueue(new GameRules {
                NextTypePolicy = NextTypePolicy.RemovedType
            }, PieceType.GetRange(0, 4));
            Assert.AreEqual(0, queue.LookAheadSize());
        }
Exemple #25
0
 /// <summary>
 /// Queues to cache. This method is non-blocking, use SaveToCache for a blocking method.
 /// </summary>
 public static void QueueToCache(byte[] fileData)
 {
     IncomingQueue.Enqueue(fileData);
     IncomingEvent.Set();
 }
 private void NoSuchSiteMessage(ref IncomingQueue queueItem)
 {
     queueItem.Status  = QueueStatus.Warning;
     queueItem.Message = string.Format("No such site:{0}".Localize(), queueItem.ObjectUUID);
 }
Exemple #27
0
 private void OnGameSet(Game game)
 {
     this.incoming = game.Incoming;
     Reset();
 }