diff --git a/src/Umbraco.Core/Sync/BatchedDatabaseServerMessenger.cs b/src/Umbraco.Core/Sync/BatchedDatabaseServerMessenger.cs index 2928b55919..9eaf557170 100644 --- a/src/Umbraco.Core/Sync/BatchedDatabaseServerMessenger.cs +++ b/src/Umbraco.Core/Sync/BatchedDatabaseServerMessenger.cs @@ -7,11 +7,15 @@ using umbraco.interfaces; namespace Umbraco.Core.Sync { - // abstract because it needs to be inherited by a class that will - // - trigger FlushBatch() when appropriate - // - trigger Boot() when appropriate - // - trigger Sync() when appropriate - // + /// + /// An that works by storing messages in the database. + /// + /// + /// abstract because it needs to be inherited by a class that will + /// - trigger FlushBatch() when appropriate + /// - trigger Boot() when appropriate + /// - trigger Sync() when appropriate + /// public abstract class BatchedDatabaseServerMessenger : DatabaseServerMessenger { diff --git a/src/Umbraco.Core/Sync/BatchedWebServiceServerMessenger.cs b/src/Umbraco.Core/Sync/BatchedWebServiceServerMessenger.cs index 57dd273f2a..9ab6d08455 100644 --- a/src/Umbraco.Core/Sync/BatchedWebServiceServerMessenger.cs +++ b/src/Umbraco.Core/Sync/BatchedWebServiceServerMessenger.cs @@ -5,52 +5,40 @@ using umbraco.interfaces; namespace Umbraco.Core.Sync { - // abstract because it needs to be inherited by a class that will - // - implement ProcessBatch() - // - trigger FlushBatch() when appropriate - // + /// + /// An that works by messaging servers via web services. + /// + /// + /// Abstract because it needs to be inherited by a class that will + /// - implement ProcessBatch() + /// - trigger FlushBatch() when appropriate + /// internal abstract class BatchedWebServiceServerMessenger : WebServiceServerMessenger { - private readonly Func> _getBatch; - - internal BatchedWebServiceServerMessenger(Func> getBatch) + internal BatchedWebServiceServerMessenger() { - if (getBatch == null) - throw new ArgumentNullException("getBatch"); - - _getBatch = getBatch; } - internal BatchedWebServiceServerMessenger(string login, string password, Func> getBatch) + internal BatchedWebServiceServerMessenger(string login, string password) : base(login, password) { - if (getBatch == null) - throw new ArgumentNullException("getBatch"); - - _getBatch = getBatch; } - internal BatchedWebServiceServerMessenger(string login, string password, bool useDistributedCalls, Func> getBatch) + internal BatchedWebServiceServerMessenger(string login, string password, bool useDistributedCalls) : base(login, password, useDistributedCalls) { - if (getBatch == null) - throw new ArgumentNullException("getBatch"); - - _getBatch = getBatch; } - protected BatchedWebServiceServerMessenger(Func> getLoginAndPassword, Func> getBatch) + protected BatchedWebServiceServerMessenger(Func> getLoginAndPassword) : base(getLoginAndPassword) { - if (getBatch == null) - throw new ArgumentNullException("getBatch"); - - _getBatch = getBatch; } + protected abstract ICollection GetBatch(bool ensureHttpContext); + protected void FlushBatch() { - var batch = _getBatch(false); + var batch = GetBatch(false); if (batch == null) return; var batcha = batch.ToArray(); @@ -82,7 +70,7 @@ namespace Umbraco.Core.Sync Type idType = null, string json = null) { - var batch = _getBatch(true); + var batch = GetBatch(true); if (batch == null) throw new Exception("Failed to get a batch."); diff --git a/src/Umbraco.Core/Sync/WebServiceServerMessenger.cs b/src/Umbraco.Core/Sync/WebServiceServerMessenger.cs index 1c63b591b7..e5717fbfdc 100644 --- a/src/Umbraco.Core/Sync/WebServiceServerMessenger.cs +++ b/src/Umbraco.Core/Sync/WebServiceServerMessenger.cs @@ -14,10 +14,11 @@ namespace Umbraco.Core.Sync /// /// An that works by messaging servers via web services. /// - // - // this messenger sends ALL instructions to ALL servers, including the local server. - // the CacheRefresher web service will run ALL instructions, so there may be duplicated, - // except for "bulk" refresh, where it excludes those coming from the local server + /// + /// this messenger sends ALL instructions to ALL servers, including the local server. + /// the CacheRefresher web service will run ALL instructions, so there may be duplicated, + /// except for "bulk" refresh, where it excludes those coming from the local server + /// // // TODO see Message() method: stop sending to local server! // just need to figure out WebServerUtility permissions issues, if any diff --git a/src/Umbraco.Web/BatchedDatabaseServerMessenger.cs b/src/Umbraco.Web/BatchedDatabaseServerMessenger.cs index 0a943f24f9..38de7ef3cc 100644 --- a/src/Umbraco.Web/BatchedDatabaseServerMessenger.cs +++ b/src/Umbraco.Web/BatchedDatabaseServerMessenger.cs @@ -8,6 +8,12 @@ using Umbraco.Web.Routing; namespace Umbraco.Web { + /// + /// An implementation that works by storing messages in the database. + /// + /// + /// This binds to appropriate umbraco events in order to trigger the Boot(), Sync() & FlushBatch() calls + /// public class BatchedDatabaseServerMessenger : Core.Sync.BatchedDatabaseServerMessenger { public BatchedDatabaseServerMessenger(ApplicationContext appContext, bool enableDistCalls, DatabaseServerMessengerOptions options) diff --git a/src/Umbraco.Web/BatchedWebServiceServerMessenger.cs b/src/Umbraco.Web/BatchedWebServiceServerMessenger.cs index fca0b193db..5fc3b48eee 100644 --- a/src/Umbraco.Web/BatchedWebServiceServerMessenger.cs +++ b/src/Umbraco.Web/BatchedWebServiceServerMessenger.cs @@ -4,38 +4,44 @@ using Umbraco.Core.Sync; namespace Umbraco.Web { + /// + /// An that works by messaging servers via web services. + /// + /// + /// This binds to appropriate umbraco events in order to trigger the FlushBatch() calls + /// internal class BatchedWebServiceServerMessenger : Core.Sync.BatchedWebServiceServerMessenger { internal BatchedWebServiceServerMessenger() - : base(GetBatch) + : base() { UmbracoModule.EndRequest += UmbracoModule_EndRequest; } internal BatchedWebServiceServerMessenger(string login, string password) - : base(login, password, GetBatch) + : base(login, password) { UmbracoModule.EndRequest += UmbracoModule_EndRequest; } internal BatchedWebServiceServerMessenger(string login, string password, bool useDistributedCalls) - : base(login, password, useDistributedCalls, GetBatch) + : base(login, password, useDistributedCalls) { UmbracoModule.EndRequest += UmbracoModule_EndRequest; } public BatchedWebServiceServerMessenger(Func> getLoginAndPassword) - : base(getLoginAndPassword, GetBatch) + : base(getLoginAndPassword) { UmbracoModule.EndRequest += UmbracoModule_EndRequest; } - private static ICollection GetBatch(bool ensure) + protected override ICollection GetBatch(bool ensureHttpContext) { var httpContext = UmbracoContext.Current == null ? null : UmbracoContext.Current.HttpContext; if (httpContext == null) { - if (ensure) + if (ensureHttpContext) throw new NotSupportedException("Cannot execute without a valid/current UmbracoContext with an HttpContext assigned."); return null; } @@ -44,7 +50,7 @@ namespace Umbraco.Web // no thread-safety here because it'll run in only 1 thread (request) at a time var batch = (ICollection)httpContext.Items[key]; - if (batch == null && ensure) + if (batch == null && ensureHttpContext) httpContext.Items[key] = batch = new List(); return batch; }