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); }
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); }
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); } }
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(); } }
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()); }
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); }
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); }
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()); }
/// <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); }
private void OnGameSet(Game game) { this.incoming = game.Incoming; Reset(); }