public static void Main(string[] args) { #if !__MonoCS__ handler = new ConsoleEventDelegate(ConsoleEventCallback); SetConsoleCtrlHandler(handler, true); #else // http://stackoverflow.com/questions/6546509/detect-when-console-application-is-closing-killed var signums = new Signum [] { Signum.SIGABRT, Signum.SIGINT, Signum.SIGKILL, Signum.SIGQUIT, Signum.SIGTERM, Signum.SIGSTOP, Signum.SIGTSTP }; List<UnixSignal> signals = new List<UnixSignal>(); foreach (var signum in signums) { try { signals.Add(new UnixSignal(signum)); } catch(Exception) {} } new Thread (delegate () { // Wait for a signal to be delivered UnixSignal.WaitAny(signals.ToArray(), -1); app.Shutdown("UnixSignal"); }).Start(); #endif if (string.IsNullOrWhiteSpace(Settings.Default.TempPath)) { Settings.Default.TempPath = Settings.Default.GetAppDataPath() + "tmp"; } if (!Settings.Default.TempPath.EndsWith("" + Path.DirectorySeparatorChar)) { Settings.Default.TempPath += Path.DirectorySeparatorChar; } new DirectoryInfo(Settings.Default.TempPath).Create(); if (string.IsNullOrWhiteSpace(Settings.Default.ReadyPath)) { Settings.Default.ReadyPath = Settings.Default.GetAppDataPath() + "dl"; } if (!Settings.Default.ReadyPath.EndsWith("" + Path.DirectorySeparatorChar)) { Settings.Default.ReadyPath += Path.DirectorySeparatorChar; } new DirectoryInfo(Settings.Default.ReadyPath).Create(); Settings.Default.Save(); if (File.Exists(Settings.Default.GetAppDataPath() + "log4net.xml")) { // load settings from file XmlConfigurator.Configure(new FileInfo(Settings.Default.GetAppDataPath() + "log4net.xml")); } else { // build our own, who logs only fatals to console Logger root = ((Hierarchy)LogManager.GetRepository()).Root; var lAppender = new ConsoleAppender { Name = "Console", Layout = new PatternLayout("%date{dd-MM-yyyy HH:mm:ss,fff} %5level [%2thread] %line:%logger.%message%n"), #if DEBUG Threshold = Level.Info #else Threshold = Level.Fatal #endif }; lAppender.ActivateOptions(); root.AddAppender(lAppender); root.Repository.Configured = true; } #if __MonoCS__ PlatformID id = Environment.OSVersion.Platform; // Don't allow running as root on Linux or Mac try { if ((id == PlatformID.Unix || id == PlatformID.MacOSX) && new UnixUserInfo(UnixEnvironment.UserName).UserId == 0) { LogManager.GetLogger(typeof(Programm)).Fatal("Sorry, you can't run XG with these permissions. Safety first!"); Environment.Exit(-1); } } catch (ArgumentException) { // arch linux fix // https://github.com/lformella/xdcc-grabscher/issues/36 } #endif app = new App(); app.AddPlugin(new Plugin.Irc.Plugin()); if (Settings.Default.UseJabberClient) { app.AddPlugin(new Plugin.Jabber.Plugin()); } if (Settings.Default.UseElasticSearch) { app.AddPlugin(new Plugin.ElasticSearch.Plugin()); } if (Settings.Default.UseWebserver) { var webServer = new Plugin.Webserver.Plugin { RrdDB = app.RrdDb }; webServer.OnShutdown += delegate { app.Shutdown(webServer); }; app.AddPlugin(webServer); } app.OnShutdownComplete += delegate { Environment.Exit(0); }; app.Start(typeof(App).ToString()); } #endregion Methods }
public static void Main(string[] args) { #if !__MonoCS__ handler = new ConsoleEventDelegate(ConsoleEventCallback); SetConsoleCtrlHandler(handler, true); #else // http://stackoverflow.com/questions/6546509/detect-when-console-application-is-closing-killed var signums = new[] { Signum.SIGABRT, Signum.SIGINT, Signum.SIGKILL, Signum.SIGQUIT, Signum.SIGTERM, Signum.SIGSTOP, Signum.SIGTSTP }; var signals = new List <UnixSignal>(); foreach (var signum in signums) { try { signals.Add(new UnixSignal(signum)); } catch (Exception) { // ... } } #if !DEBUG new Thread(delegate() { // Wait for a signal to be delivered UnixSignal.WaitAny(signals.ToArray(), -1); app.Shutdown("UnixSignal"); }).Start(); #endif #endif if (string.IsNullOrWhiteSpace(Settings.Default.TempPath)) { Settings.Default.TempPath = Settings.Default.GetAppDataPath() + "tmp"; } if (!Settings.Default.TempPath.EndsWith("" + Path.DirectorySeparatorChar, StringComparison.CurrentCulture)) { Settings.Default.TempPath += Path.DirectorySeparatorChar; } new DirectoryInfo(Settings.Default.TempPath).Create(); if (string.IsNullOrWhiteSpace(Settings.Default.ReadyPath)) { Settings.Default.ReadyPath = Settings.Default.GetAppDataPath() + "dl"; } if (!Settings.Default.ReadyPath.EndsWith("" + Path.DirectorySeparatorChar, StringComparison.CurrentCulture)) { Settings.Default.ReadyPath += Path.DirectorySeparatorChar; } new DirectoryInfo(Settings.Default.ReadyPath).Create(); Settings.Default.Save(); if (File.Exists(Settings.Default.GetAppDataPath() + "log4net.xml")) { // load settings from file XmlConfigurator.Configure(new FileInfo(Settings.Default.GetAppDataPath() + "log4net.xml")); } else { // build our own, who logs only fatals to console Logger root = ((Hierarchy)LogManager.GetRepository()).Root; var lAppender = new ConsoleAppender { Name = "Console", Layout = new PatternLayout("%date{dd-MM-yyyy HH:mm:ss,fff} %5level [%2thread] %line:%logger.%message%n"), #if DEBUG Threshold = Level.Info #else Threshold = Level.Fatal #endif }; lAppender.ActivateOptions(); root.AddAppender(lAppender); root.Repository.Configured = true; } #if __MonoCS__ PlatformID id = Environment.OSVersion.Platform; // Don't allow running as root on Linux or Mac try { if ((id == PlatformID.Unix || id == PlatformID.MacOSX) && new UnixUserInfo(UnixEnvironment.UserName).UserId == 0) { LogManager.GetLogger(typeof(Programm)).Fatal("Sorry, you can't run XG with these permissions. Safety first!"); Environment.Exit(-1); } } catch (ArgumentException) { // arch linux fix // https://github.com/lformella/xdcc-grabscher/issues/36 } #endif app = new App(); app.AddPlugin(new Plugin.Irc.Plugin()); if (Settings.Default.UseJabberClient) { app.AddPlugin(new Plugin.Jabber.Plugin()); } if (Settings.Default.UseElasticSearch) { app.AddPlugin(new Plugin.ElasticSearch.Plugin()); } if (Settings.Default.UseWebserver) { var webServer = new Plugin.Webserver.Plugin { RrdDB = app.RrdDb }; webServer.OnShutdown += delegate { app.Shutdown(webServer); }; app.AddPlugin(webServer); } app.OnShutdownComplete += delegate { Environment.Exit(0); }; app.Start(typeof(App).ToString()); } }