From 609d1f19ccc251b9863e22aba171aa559739f473 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 23 May 2015 18:28:26 -0400 Subject: [PATCH] update mono restart --- MediaBrowser.Server.Mono/Program.cs | 234 ++++++++++++++-------------- 1 file changed, 119 insertions(+), 115 deletions(-) diff --git a/MediaBrowser.Server.Mono/Program.cs b/MediaBrowser.Server.Mono/Program.cs index 7cd80f5c97..a9d5104262 100644 --- a/MediaBrowser.Server.Mono/Program.cs +++ b/MediaBrowser.Server.Mono/Program.cs @@ -17,126 +17,127 @@ using System.Threading.Tasks; namespace MediaBrowser.Server.Mono { - public class MainClass - { - private static ApplicationHost _appHost; + public class MainClass + { + private static ApplicationHost _appHost; - private static ILogger _logger; + private static ILogger _logger; - public static void Main (string[] args) - { + public static void Main(string[] args) + { var applicationPath = Assembly.GetEntryAssembly().Location; - - var options = new StartupOptions(); - // Allow this to be specified on the command line. - var customProgramDataPath = options.GetOption("-programdata"); + var options = new StartupOptions(); + + // Allow this to be specified on the command line. + var customProgramDataPath = options.GetOption("-programdata"); - var appPaths = CreateApplicationPaths(applicationPath, customProgramDataPath); + var appPaths = CreateApplicationPaths(applicationPath, customProgramDataPath); - var logManager = new NlogManager(appPaths.LogDirectoryPath, "server"); - logManager.ReloadLogger(LogSeverity.Info); - logManager.AddConsoleOutput(); + var logManager = new NlogManager(appPaths.LogDirectoryPath, "server"); + logManager.ReloadLogger(LogSeverity.Info); + logManager.AddConsoleOutput(); - var logger = _logger = logManager.GetLogger("Main"); + var logger = _logger = logManager.GetLogger("Main"); ApplicationHost.LogEnvironmentInfo(logger, appPaths, true); - AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; + AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; - try - { - RunApplication(appPaths, logManager, options); - } - finally - { - logger.Info("Shutting down"); + try + { + RunApplication(appPaths, logManager, options); + } + finally + { + logger.Info("Shutting down"); + + _appHost.Dispose(); + } + } - _appHost.Dispose(); - } - } + private static ServerApplicationPaths CreateApplicationPaths(string applicationPath, string programDataPath) + { + if (string.IsNullOrEmpty(programDataPath)) + { + programDataPath = ApplicationPathHelper.GetProgramDataPath(applicationPath); + } - private static ServerApplicationPaths CreateApplicationPaths(string applicationPath, string programDataPath) - { - if (string.IsNullOrEmpty(programDataPath)) - { - programDataPath = ApplicationPathHelper.GetProgramDataPath(applicationPath); - } - - return new ServerApplicationPaths(programDataPath, applicationPath, Path.GetDirectoryName(applicationPath)); - } + return new ServerApplicationPaths(programDataPath, applicationPath, Path.GetDirectoryName(applicationPath)); + } - private static readonly TaskCompletionSource ApplicationTaskCompletionSource = new TaskCompletionSource(); + private static readonly TaskCompletionSource ApplicationTaskCompletionSource = new TaskCompletionSource(); - private static void RunApplication(ServerApplicationPaths appPaths, ILogManager logManager, StartupOptions options) - { - SystemEvents.SessionEnding += SystemEvents_SessionEnding; + private static void RunApplication(ServerApplicationPaths appPaths, ILogManager logManager, StartupOptions options) + { + SystemEvents.SessionEnding += SystemEvents_SessionEnding; - // Allow all https requests - ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; }); + // Allow all https requests + ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; }); - var fileSystem = new CommonFileSystem(logManager.GetLogger("FileSystem"), false, true); + var fileSystem = new CommonFileSystem(logManager.GetLogger("FileSystem"), false, true); - var nativeApp = new NativeApp(); + var nativeApp = new NativeApp(); _appHost = new ApplicationHost(appPaths, logManager, options, fileSystem, "MBServer.Mono", nativeApp); - - if (options.ContainsOption("-v")) { - Console.WriteLine (_appHost.ApplicationVersion.ToString()); - return; - } - - Console.WriteLine ("appHost.Init"); - - var initProgress = new Progress(); - - var task = _appHost.Init(initProgress); - Task.WaitAll (task); - - Console.WriteLine ("Running startup tasks"); - - task = _appHost.RunStartupTasks(); - Task.WaitAll (task); - - task = ApplicationTaskCompletionSource.Task; - - Task.WaitAll (task); - } - - /// - /// Handles the SessionEnding event of the SystemEvents control. - /// - /// The source of the event. - /// The instance containing the event data. - static void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e) - { - if (e.Reason == SessionEndReasons.SystemShutdown) - { - Shutdown(); - } - } - - /// - /// Handles the UnhandledException event of the CurrentDomain control. - /// - /// The source of the event. - /// The instance containing the event data. - static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) - { - var exception = (Exception)e.ExceptionObject; + + if (options.ContainsOption("-v")) + { + Console.WriteLine(_appHost.ApplicationVersion.ToString()); + return; + } + + Console.WriteLine("appHost.Init"); + + var initProgress = new Progress(); + + var task = _appHost.Init(initProgress); + Task.WaitAll(task); + + Console.WriteLine("Running startup tasks"); + + task = _appHost.RunStartupTasks(); + Task.WaitAll(task); + + task = ApplicationTaskCompletionSource.Task; + + Task.WaitAll(task); + } + + /// + /// Handles the SessionEnding event of the SystemEvents control. + /// + /// The source of the event. + /// The instance containing the event data. + static void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e) + { + if (e.Reason == SessionEndReasons.SystemShutdown) + { + Shutdown(); + } + } + + /// + /// Handles the UnhandledException event of the CurrentDomain control. + /// + /// The source of the event. + /// The instance containing the event data. + static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) + { + var exception = (Exception)e.ExceptionObject; new UnhandledExceptionWriter(_appHost.ServerConfigurationManager.ApplicationPaths, _logger, _appHost.LogManager).Log(exception); - if (!Debugger.IsAttached) - { - Environment.Exit(System.Runtime.InteropServices.Marshal.GetHRForException(exception)); - } - } + if (!Debugger.IsAttached) + { + Environment.Exit(System.Runtime.InteropServices.Marshal.GetHRForException(exception)); + } + } - public static void Shutdown() - { - ApplicationTaskCompletionSource.SetResult (true); - } + public static void Shutdown() + { + ApplicationTaskCompletionSource.SetResult(true); + } public static void Restart() { @@ -145,35 +146,38 @@ namespace MediaBrowser.Server.Mono _logger.Info("Starting new instance"); - var currentProcess = Process.GetCurrentProcess(); - var args = Environment.GetCommandLineArgs() - .Select(NormalizeCommandLineArgument); + .Skip(1) + .Select(NormalizeCommandLineArgument); var commandLineArgsString = string.Join(" ", args.ToArray()); + var module = Environment.GetCommandLineArgs().First(); + + _logger.Info("Executable: {0}", module); + _logger.Info("Arguments: {0}", commandLineArgsString); - Process.Start(currentProcess.MainModule.FileName, commandLineArgsString); + Process.Start(module, commandLineArgsString); _logger.Info("Calling Environment.Exit"); Environment.Exit(0); } - private static string NormalizeCommandLineArgument(string arg) - { - if (arg.IndexOf(" ", StringComparison.OrdinalIgnoreCase) == -1) - { + private static string NormalizeCommandLineArgument(string arg) + { + if (arg.IndexOf(" ", StringComparison.OrdinalIgnoreCase) == -1) + { return arg; - } + } return "\"" + arg + "\""; - } - } - - class NoCheckCertificatePolicy : ICertificatePolicy - { - public bool CheckValidationResult (ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem) - { - return true; - } - } + } + } + + class NoCheckCertificatePolicy : ICertificatePolicy + { + public bool CheckValidationResult(ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem) + { + return true; + } + } }