// Copyright (c) Umbraco. // See LICENSE for more details. using Microsoft.Extensions.Logging; using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; using Umbraco.Cms.Infrastructure.Persistence; namespace Umbraco.Cms.Core.Cache { /// /// Ensures that distributed cache events are setup and the is initialized /// public sealed class DatabaseServerMessengerNotificationHandler : INotificationHandler, INotificationHandler { private readonly IServerMessenger _messenger; private readonly IUmbracoDatabaseFactory _databaseFactory; private readonly ILogger _logger; private readonly IRuntimeState _runtimeState; /// /// Initializes a new instance of the class. /// public DatabaseServerMessengerNotificationHandler( IServerMessenger serverMessenger, IUmbracoDatabaseFactory databaseFactory, ILogger logger, IRuntimeState runtimeState) { _databaseFactory = databaseFactory; _logger = logger; _messenger = serverMessenger; _runtimeState = runtimeState; } /// public void Handle(UmbracoApplicationStartingNotification notification) { if (_runtimeState.Level < RuntimeLevel.Run) { return; } if (_databaseFactory.CanConnect == false) { _logger.LogWarning("Cannot connect to the database, distributed calls will not be enabled for this server."); return; } // Sync on startup, this will run through the messenger's initialization sequence _messenger?.Sync(); } /// /// Clear the batch on end request /// public void Handle(UmbracoRequestEndNotification notification) => _messenger?.SendMessages(); } }