Exemplo n.º 1
0
        private static void Mode(string modeName, string baseConfigFilename, string modeConfigFilename)
        {
            BaseConfig baseConfig = ReadConfig <BaseConfig>(baseConfigFilename);

            using ILoggerFactory loggerFactory = BuildLoggerFactory(baseConfig);
            ILogger logger = loggerFactory.CreateLogger("main");
            IMode   mode   = modeName switch
            {
                "run" => new Runmode(loggerFactory, baseConfig, ReadConfig <RunmodeConfig>(modeConfigFilename)),
                "match" => new Matchmode(loggerFactory, baseConfig, ReadConfig <MatchmodeConfig>(modeConfigFilename)),
                "dualcore" => new DualcoreMode(loggerFactory, baseConfig),
                "dummy" => new DummyMode(loggerFactory, baseConfig),
                _ => throw new NotSupportedException($"Invalid mode '{modeName}'")
            };

            try
            {
                Task modeTask = mode.Run();
                void Abort(object?sender, EventArgs args)
                {
                    logger.LogInformation("Aborting mode...");
                    mode.Cancel();
                    modeTask.Wait();
                }
                AppDomain.CurrentDomain.ProcessExit += Abort; // SIGTERM
                Console.CancelKeyPress += Abort;              // CTRL-C / SIGINT
                modeTask.Wait();
            }
            catch (Exception ex)
            {
                logger.LogCritical(ex, "uncaught exception! TPP is crashing now, goodbye.");
            }
        }