From 4f67fc4aefc11c1a4293227c70de922dbe03c652 Mon Sep 17 00:00:00 2001 From: LukePulverenti Date: Thu, 7 Mar 2013 00:34:00 -0500 Subject: removed base kernel and ikernel --- .../BaseApplicationHost.cs | 94 +++++++++++++++------- 1 file changed, 67 insertions(+), 27 deletions(-) (limited to 'MediaBrowser.Common.Implementations/BaseApplicationHost.cs') diff --git a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs index 77ff4f1885..a5af2ff66a 100644 --- a/MediaBrowser.Common.Implementations/BaseApplicationHost.cs +++ b/MediaBrowser.Common.Implementations/BaseApplicationHost.cs @@ -1,13 +1,11 @@ using MediaBrowser.Common.Configuration; +using MediaBrowser.Common.Events; using MediaBrowser.Common.Implementations.Logging; using MediaBrowser.Common.Implementations.NetworkManagement; using MediaBrowser.Common.Implementations.ScheduledTasks; using MediaBrowser.Common.Implementations.Security; using MediaBrowser.Common.Implementations.Serialization; -using MediaBrowser.Common.Implementations.Udp; using MediaBrowser.Common.Implementations.Updates; -using MediaBrowser.Common.Implementations.WebSocket; -using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Net; using MediaBrowser.Common.Plugins; using MediaBrowser.Common.ScheduledTasks; @@ -15,6 +13,7 @@ using MediaBrowser.Common.Security; using MediaBrowser.Common.Updates; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; +using MediaBrowser.Model.System; using MediaBrowser.Model.Updates; using SimpleInjector; using System; @@ -30,6 +29,22 @@ namespace MediaBrowser.Common.Implementations public abstract class BaseApplicationHost : IApplicationHost where TApplicationPathsType : class, IApplicationPaths, new() { + /// + /// Occurs when [has pending restart changed]. + /// + public event EventHandler HasPendingRestartChanged; + + /// + /// Occurs when [application updated]. + /// + public event EventHandler> ApplicationUpdated; + + /// + /// Gets or sets a value indicating whether this instance has changes that require the entire application to restart. + /// + /// true if this instance has pending application restart; otherwise, false. + public bool HasPendingRestart { get; private set; } + /// /// Gets or sets the logger. /// @@ -132,11 +147,11 @@ namespace MediaBrowser.Common.Implementations /// Gets the kernel. /// /// The kernel. - protected IKernel Kernel { get; private set; } protected ITaskManager TaskManager { get; private set; } protected ISecurityManager SecurityManager { get; private set; } protected IPackageManager PackageManager { get; private set; } protected IHttpClient HttpClient { get; private set; } + protected INetworkManager NetworkManager { get; private set; } protected IConfigurationManager ConfigurationManager { get; private set; } @@ -168,15 +183,11 @@ namespace MediaBrowser.Common.Implementations Logger.Info("Version {0} initializing", ApplicationVersion); - Kernel = GetKernel(); - await RegisterResources().ConfigureAwait(false); FindParts(); Task.Run(() => ConfigureAutoRunAtStartup()); - - Kernel.Init(); } /// @@ -191,7 +202,6 @@ namespace MediaBrowser.Common.Implementations /// The name of the log file prefix. protected abstract string LogFilePrefixName { get; } - protected abstract IKernel GetKernel(); protected abstract IConfigurationManager GetConfigurationManager(); /// @@ -199,10 +209,6 @@ namespace MediaBrowser.Common.Implementations /// protected virtual void FindParts() { - Resolve().Init(GetExports(false)); - Resolve().AddWebSocketListeners(GetExports(false)); - - Resolve().Start(); Resolve().AddTasks(GetExports(false)); Plugins = GetExports(); @@ -239,11 +245,7 @@ namespace MediaBrowser.Common.Implementations RegisterSingleInstance(ApplicationPaths); - var networkManager = new NetworkManager(); - - var serverManager = new ServerManager.ServerManager(this, Kernel, networkManager, JsonSerializer, Logger, ConfigurationManager); - - TaskManager = new TaskManager(ApplicationPaths, JsonSerializer, Logger, serverManager); + TaskManager = new TaskManager(ApplicationPaths, JsonSerializer, Logger); RegisterSingleInstance(JsonSerializer); RegisterSingleInstance(XmlSerializer); @@ -251,25 +253,22 @@ namespace MediaBrowser.Common.Implementations RegisterSingleInstance(LogManager); RegisterSingleInstance(Logger); - RegisterSingleInstance(Kernel); - RegisterSingleInstance(TaskManager); - RegisterSingleInstance(() => new AlchemyServer(Logger)); RegisterSingleInstance(ProtobufSerializer); - RegisterSingleInstance(new UdpServer(Logger), false); HttpClient = new HttpClientManager.HttpClientManager(ApplicationPaths, Logger); RegisterSingleInstance(HttpClient); - RegisterSingleInstance(networkManager); - RegisterSingleInstance(serverManager); + NetworkManager = new NetworkManager(); - SecurityManager = new PluginSecurityManager(Kernel, HttpClient, JsonSerializer, ApplicationPaths); + RegisterSingleInstance(NetworkManager); + + SecurityManager = new PluginSecurityManager(this, HttpClient, JsonSerializer, ApplicationPaths); RegisterSingleInstance(SecurityManager); - PackageManager = new PackageManager(SecurityManager, networkManager, HttpClient, ApplicationPaths, JsonSerializer, Logger); + PackageManager = new PackageManager(SecurityManager, NetworkManager, HttpClient, ApplicationPaths, JsonSerializer, Logger); RegisterSingleInstance(PackageManager); }); @@ -450,6 +449,34 @@ namespace MediaBrowser.Common.Implementations Plugins = list; } + /// + /// Performs the pending restart. + /// + /// Task. + public void PerformPendingRestart() + { + if (HasPendingRestart) + { + Logger.Info("Restarting the application"); + + Restart(); + } + else + { + Logger.Info("PerformPendingRestart - not needed"); + } + } + + /// + /// Notifies that the kernel that a change has been made that requires a restart + /// + public void NotifyPendingRestart() + { + HasPendingRestart = true; + + EventHelper.QueueEventIfNotNull(HasPendingRestartChanged, this, EventArgs.Empty, Logger); + } + /// /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// @@ -488,7 +515,20 @@ namespace MediaBrowser.Common.Implementations public abstract Task CheckForApplicationUpdate(CancellationToken cancellationToken, IProgress progress); - public abstract Task UpdateApplication(PackageVersionInfo package, CancellationToken cancellationToken, IProgress progress); + /// + /// Updates the application. + /// + /// The package that contains the update + /// The cancellation token. + /// The progress. + /// Task. + public async Task UpdateApplication(PackageVersionInfo package, CancellationToken cancellationToken, IProgress progress) + { + var pkgManager = Resolve(); + await pkgManager.InstallPackage(progress, package, cancellationToken).ConfigureAwait(false); + + EventHelper.QueueEventIfNotNull(ApplicationUpdated, this, new GenericEventArgs { Argument = package.version }, Logger); + } public abstract void Shutdown(); } -- cgit v1.2.3