コード例 #1
0
        private static IHostBuilder CreateHostBuilder(string[] args)
        {
            return(Host
                   .CreateDefaultBuilder(args)
                   .ConfigureServices((hostBuilderContext, serviceCollection) =>
            {
                // Options
                serviceCollection.Configure <SerilogOptions>(hostBuilderContext.Configuration.GetSection("Serilog:MinimumLevel"));
                serviceCollection.Configure <DiscordOptions>(hostBuilderContext.Configuration.GetSection("Discord"));
                serviceCollection.Configure <BlockchainOptions>(hostBuilderContext.Configuration.GetSection("Blockchain"));

                // Database
                serviceCollection.AddDbContextFactory <SqliteDatabaseContext>(builder =>
                {
                    builder.UseSqlite($"Data Source={Path.Combine(hostBuilderContext.HostingEnvironment.ContentRootPath, "data.db")}");
                });
                serviceCollection.AddHostedService <SqliteDatabaseHostedService>();

                // Logger
                serviceCollection.AddSingleton <LoggingLevelSwitch>();
                serviceCollection.AddSingleton <Logger>();

                // Discord
                serviceCollection.AddSingleton(_ => new DiscordShardedClient(new DiscordSocketConfig
                {
                    LogLevel = LogSeverity.Verbose,
                    RateLimitPrecision = RateLimitPrecision.Millisecond
                }));
                serviceCollection.AddSingleton(serviceProvider =>
                {
                    var commandService = new CommandService(new CommandServiceConfig {
                        CaseSensitiveCommands = false, IgnoreExtraArgs = true
                    });
                    commandService.AddTypeReader <IEmote>(new EmoteTypeReader());
                    commandService.AddModulesAsync(Assembly.GetExecutingAssembly(), serviceProvider);
                    return commandService;
                });
                serviceCollection.AddHostedService <DiscordHostedService>();

                // Rpc
                serviceCollection.AddSingleton(_ => new DaemonRpcClient(hostBuilderContext.Configuration["Blockchain:Rpc:Daemon:Host"], int.Parse(hostBuilderContext.Configuration["Blockchain:Rpc:Daemon:Port"])));
                serviceCollection.AddSingleton(_ => new WalletRpcClient(hostBuilderContext.Configuration["Blockchain:Rpc:Wallet:Host"], int.Parse(hostBuilderContext.Configuration["Blockchain:Rpc:Wallet:Port"])));
                serviceCollection.AddHostedService <DaemonHostedService>();
            })
                   .UseSerilog((hostBuilderContext, serviceProvider, loggerConfiguration) =>
            {
                var configuration = loggerConfiguration
                                    .ReadFrom.Configuration(hostBuilderContext.Configuration)
                                    .MinimumLevel.ControlledBy(serviceProvider.GetRequiredService <LoggingLevelSwitch>());

                var outputTemplateTextFormatter = new OutputTemplateTextFormatter("{Message}{NewLine}{Exception}");

                configuration.WriteTo.AnsiConsole(outputTemplateTextFormatter);
            })
                   .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup <Startup>(); }));
        }
コード例 #2
0
        private static IHostBuilder CreateHostBuilder(string[] args)
        {
            return(Host
                   .CreateDefaultBuilder(args)
                   .ConfigureServices((hostBuilderContext, serviceCollection) =>
            {
                var configuration = hostBuilderContext.Configuration;

                // Options
                serviceCollection.Configure <SerilogOptions>(configuration.GetSection("Serilog:MinimumLevel"));
                serviceCollection.Configure <ApplicationOptions>(configuration.GetSection("Application"));
                serviceCollection.Configure <ServerOptions>(configuration.GetSection("Server"));
                serviceCollection.Configure <NetworkOptions>(configuration.GetSection("Server:Network"));
                serviceCollection.Configure <WorldOptions>(configuration.GetSection("Server:World"));

                // Database
                serviceCollection.AddDbContextFactory <SqliteDatabaseContext>(builder => { builder.UseSqlite($"Data Source={Path.Combine(hostBuilderContext.HostingEnvironment.ContentRootPath, "data.db")}"); });

                // Logger
                serviceCollection.AddSingleton <LoggingLevelSwitch>();
                serviceCollection.AddSingleton <Logger>();

                // Network
                serviceCollection.AddSingleton <NatDevices>();
                serviceCollection.AddSingleton <TcpClientListener>();
                serviceCollection.AddSingleton <TcpClientCollection>();

                // Player
                serviceCollection.AddSingleton <PlayerCollection>();

                // World
                serviceCollection.AddSingleton <World>();

                serviceCollection.AddSingleton <GameServer>();

                var headlessMode = configuration.GetValue("Application:HeadlessMode", true);

                if (headlessMode)
                {
                    serviceCollection.AddSingleton <ConsoleWindow>();
                    serviceCollection.AddSingleton <ConsoleWindowViewModel>();

                    serviceCollection.AddHostedService <ConsoleHostedService>();
                }
                else
                {
                    serviceCollection.AddSingleton(_ => new ClassicDesktopStyleApplicationLifetime
                    {
                        Args = args,
                        ShutdownMode = ShutdownMode.OnMainWindowClose
                    });
                    serviceCollection.AddSingleton <ActionLogger>();
                    serviceCollection.AddSingleton <MainWindowViewModel>();

                    serviceCollection.AddHostedService <AvaloniaHostedService>();
                }
            })
                   .UseSerilog((hostBuilderContext, serviceProvider, loggerConfiguration) =>
            {
                var configuration = loggerConfiguration
                                    .ReadFrom.Configuration(hostBuilderContext.Configuration)
                                    .MinimumLevel.ControlledBy(serviceProvider.GetRequiredService <LoggingLevelSwitch>());

                var headlessMode = hostBuilderContext.Configuration.GetValue("Application:HeadlessMode", true);
                var outputTemplateTextFormatter = new OutputTemplateTextFormatter("{Message}{NewLine}{Exception}");

                if (headlessMode)
                {
                    configuration.WriteTo.AnsiConsole(outputTemplateTextFormatter);
                }
                else
                {
                    configuration.WriteTo.Logger(subLogger => subLogger
                                                 .Filter.ByExcluding(Matching.FromSource <Logger>())
                                                 .WriteTo.AnsiConsole(outputTemplateTextFormatter));

                    configuration.WriteTo.Logger(subLogger => subLogger
                                                 .Filter.ByIncludingOnly(Matching.FromSource <Logger>())
                                                 .WriteTo.Action(serviceProvider.GetRequiredService <ActionLogger>().WriteToLogEvent, outputTemplateTextFormatter));
                }
            }));
        }