diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-04-08 11:55:53 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-04-08 11:55:53 -0400 |
| commit | 804115bf8d526477756828ff4ca632c351e03b90 (patch) | |
| tree | 8da201ceb75bd07b816717d363ae6b41e343bbf5 /MediaBrowser.ServerApplication/ApplicationHost.cs | |
| parent | 59cfad03e8839556639e5a00abba1a8e6a959b18 (diff) | |
remove and/or delay unnecessary startup work
Diffstat (limited to 'MediaBrowser.ServerApplication/ApplicationHost.cs')
| -rw-r--r-- | MediaBrowser.ServerApplication/ApplicationHost.cs | 136 |
1 files changed, 94 insertions, 42 deletions
diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index 6b748bb48..b5e267810 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -146,8 +146,12 @@ namespace MediaBrowser.ServerApplication /// <value>The display preferences manager.</value> internal IDisplayPreferencesManager DisplayPreferencesManager { get; set; } + /// <summary> + /// Gets or sets the media encoder. + /// </summary> + /// <value>The media encoder.</value> private IMediaEncoder MediaEncoder { get; set; } - + /// <summary> /// The full path to our startmenu shortcut /// </summary> @@ -162,13 +166,12 @@ namespace MediaBrowser.ServerApplication /// <returns>Task.</returns> protected override async Task RunStartupTasks() { - // Do these before allowing the base method to run, which will invoke startup scheduled tasks - await ServerKernel.LoadRepositories(ServerConfigurationManager).ConfigureAwait(false); - await base.RunStartupTasks().ConfigureAwait(false); DirectoryWatchers.Start(); + Logger.Info("Core startup complete"); + Parallel.ForEach(GetExports<IServerEntryPoint>(), entryPoint => entryPoint.Run()); } @@ -180,6 +183,12 @@ namespace MediaBrowser.ServerApplication { ServerKernel = new Kernel(ServerConfigurationManager); + var httpServerTask = Task.Run(() => + { + HttpServer = ServerFactory.CreateServer(this, Logger, "Media Browser", "index.html"); + RegisterSingleInstance(HttpServer, false); + }); + await base.RegisterResources().ConfigureAwait(false); RegisterSingleInstance<IHttpResultFactory>(new HttpResultFactory(LogManager)); @@ -192,22 +201,16 @@ namespace MediaBrowser.ServerApplication RegisterSingleInstance<IWebSocketServer>(() => new AlchemyServer(Logger)); - RegisterSingleInstance<IIsoManager>(new PismoIsoManager(Logger)); - RegisterSingleInstance<IBlurayExaminer>(new BdInfoExaminer()); + RegisterSingleInstance<IIsoManager>(() => new PismoIsoManager(Logger)); + RegisterSingleInstance<IBlurayExaminer>(() => new BdInfoExaminer()); ZipClient = new DotNetZipClient(); RegisterSingleInstance(ZipClient); - HttpServer = ServerFactory.CreateServer(this, Logger, "Media Browser", "index.html"); - RegisterSingleInstance(HttpServer, false); - - ServerManager = new ServerManager(this, JsonSerializer, Logger, ServerConfigurationManager, ServerKernel); - RegisterSingleInstance(ServerManager); - - UserManager = new UserManager(ServerKernel, Logger, ServerConfigurationManager); + UserManager = new UserManager(Logger, ServerConfigurationManager); RegisterSingleInstance(UserManager); - LibraryManager = new LibraryManager(ServerKernel, Logger, TaskManager, UserManager, ServerConfigurationManager); + LibraryManager = new LibraryManager(Logger, TaskManager, UserManager, ServerConfigurationManager); RegisterSingleInstance(LibraryManager); InstallationManager = new InstallationManager(HttpClient, PackageManager, JsonSerializer, Logger, this); @@ -227,9 +230,17 @@ namespace MediaBrowser.ServerApplication MediaEncoder = new MediaEncoder(LogManager.GetLogger("MediaEncoder"), ZipClient, ApplicationPaths, JsonSerializer); RegisterSingleInstance(MediaEncoder); - await ConfigureRepositories().ConfigureAwait(false); + ServerManager = new ServerManager(this, JsonSerializer, Logger, ServerConfigurationManager, ServerKernel); + RegisterSingleInstance(ServerManager); + + var displayPreferencesTask = Task.Run(async () => await ConfigureDisplayPreferencesRepositories().ConfigureAwait(false)); + var itemsTask = Task.Run(async () => await ConfigureItemRepositories().ConfigureAwait(false)); + var userdataTask = Task.Run(async () => await ConfigureUserDataRepositories().ConfigureAwait(false)); + var userTask = Task.Run(async () => await ConfigureUserRepositories().ConfigureAwait(false)); + + await Task.WhenAll(httpServerTask, itemsTask, userTask, displayPreferencesTask, userdataTask).ConfigureAwait(false); + SetKernelProperties(); - SetStaticProperties(); } /// <summary> @@ -237,16 +248,13 @@ namespace MediaBrowser.ServerApplication /// </summary> private void SetKernelProperties() { - ServerKernel.FFMpegManager = new FFMpegManager(ServerKernel, ApplicationPaths, MediaEncoder); - ServerKernel.ImageManager = new ImageManager(ServerKernel, LogManager.GetLogger("ImageManager"), ApplicationPaths); - Parallel.Invoke( - () => ServerKernel.UserDataRepositories = GetExports<IUserDataRepository>(), - () => ServerKernel.UserRepositories = GetExports<IUserRepository>(), - () => ServerKernel.ItemRepositories = GetExports<IItemRepository>(), + () => ServerKernel.FFMpegManager = new FFMpegManager(ApplicationPaths, MediaEncoder, LibraryManager), + () => ServerKernel.ImageManager = new ImageManager(ServerKernel, LogManager.GetLogger("ImageManager"), ApplicationPaths), () => ServerKernel.WeatherProviders = GetExports<IWeatherProvider>(), () => ServerKernel.ImageEnhancers = GetExports<IImageEnhancer>().OrderBy(e => e.Priority).ToArray(), - () => ServerKernel.StringFiles = GetExports<LocalizedStringData>() + () => ServerKernel.StringFiles = GetExports<LocalizedStringData>(), + SetStaticProperties ); } @@ -254,15 +262,56 @@ namespace MediaBrowser.ServerApplication /// Configures the repositories. /// </summary> /// <returns>Task.</returns> - private async Task ConfigureRepositories() + private async Task ConfigureDisplayPreferencesRepositories() { - var displayPreferencesRepositories = GetExports<IDisplayPreferencesRepository>(); + var repositories = GetExports<IDisplayPreferencesRepository>(); - var repo = GetRepository(displayPreferencesRepositories, ServerConfigurationManager.Configuration.DisplayPreferencesRepository); + var repository = GetRepository(repositories, ServerConfigurationManager.Configuration.DisplayPreferencesRepository); - await repo.Initialize().ConfigureAwait(false); + await repository.Initialize().ConfigureAwait(false); - ((DisplayPreferencesManager)DisplayPreferencesManager).Repository = repo; + ((DisplayPreferencesManager)DisplayPreferencesManager).Repository = repository; + } + + /// <summary> + /// Configures the item repositories. + /// </summary> + /// <returns>Task.</returns> + private async Task ConfigureItemRepositories() + { + var repositories = GetExports<IItemRepository>(); + + var repository = GetRepository(repositories, ServerConfigurationManager.Configuration.ItemRepository); + + await repository.Initialize().ConfigureAwait(false); + + ((LibraryManager)LibraryManager).ItemRepository = repository; + } + + /// <summary> + /// Configures the user data repositories. + /// </summary> + /// <returns>Task.</returns> + private async Task ConfigureUserDataRepositories() + { + var repositories = GetExports<IUserDataRepository>(); + + var repository = GetRepository(repositories, ServerConfigurationManager.Configuration.UserDataRepository); + + await repository.Initialize().ConfigureAwait(false); + + ((UserManager)UserManager).UserDataRepository = repository; + } + + private async Task ConfigureUserRepositories() + { + var repositories = GetExports<IUserRepository>(); + + var repository = GetRepository(repositories, ServerConfigurationManager.Configuration.UserRepository); + + await repository.Initialize().ConfigureAwait(false); + + ((UserManager)UserManager).UserRepository = repository; } /// <summary> @@ -286,8 +335,6 @@ namespace MediaBrowser.ServerApplication /// </summary> protected override void FindParts() { - base.FindParts(); - if (IsFirstRun) { RegisterServerWithAdministratorAccess(); @@ -295,6 +342,8 @@ namespace MediaBrowser.ServerApplication Parallel.Invoke( + () => base.FindParts(), + () => { HttpServer.Init(GetExports<IRestfulService>(false)); @@ -305,19 +354,22 @@ namespace MediaBrowser.ServerApplication () => LibraryManager.AddParts(GetExports<IResolverIgnoreRule>(), GetExports<IVirtualFolderCreator>(), GetExports<IItemResolver>(), GetExports<IIntroProvider>(), GetExports<IBaseItemComparer>()), - () => ProviderManager.AddMetadataProviders(GetExports<BaseMetadataProvider>().ToArray()) - ); + () => ProviderManager.AddMetadataProviders(GetExports<BaseMetadataProvider>().ToArray()), - UdpServer = new UdpServer(Logger, NetworkManager, ServerConfigurationManager); - - try - { - UdpServer.Start(UdpServerPort); - } - catch (SocketException ex) - { - Logger.ErrorException("Failed to start UDP Server", ex); - } + () => + { + UdpServer = new UdpServer(Logger, NetworkManager, ServerConfigurationManager); + + try + { + UdpServer.Start(UdpServerPort); + } + catch (SocketException ex) + { + Logger.ErrorException("Failed to start UDP Server", ex); + } + } + ); } /// <summary> |
