Beispiel #1
0
        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
    }
Beispiel #2
0
        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());
        }
    }