using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Yuanshen.Gameserver; using Yuanshen.Gameserver.Controllers.Dispatching; using Yuanshen.Gameserver.Game; using Yuanshen.Gameserver.Network; using Yuanshen.Gameserver.Network.Kcp; using Yuanshen.Gameserver.Network.Session; using Yuanshen.Gameserver.Options; using Yuanshen.Common.Console; using Yuanshen.Common.Data.Provider; Console.Title = "Yuanshen | Game Server"; Directory.SetCurrentDirectory(AppContext.BaseDirectory); ConsoleBanner.Print("GAME SERVER", new[] { ("listen", "0.0.0.0:22102"), ("protocol", "kcp / 0.9.10"), ("console", "type a GM command, ? for help") }); HostApplicationBuilder builder = Host.CreateApplicationBuilder(args); builder.Logging.ClearProviders(); builder.Logging.AddProvider(new ThemedLoggerProvider()); builder.Services.Configure(builder.Configuration.GetSection(GatewayOptions.Section)); builder.Services.Configure(builder.Configuration.GetSection(DatabaseOptions.Section)); builder.Services.UseLocalAssets(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddHostedService(); IHost host = builder.Build(); ConsoleBridge bridge = host.Services.GetRequiredService(); ConsolePrompt.Start("yuanshen >", async command => { IServiceProvider? session = bridge.Session; if (session is null) { ConsolePrompt.Warn("no player is connected"); return; } GmCommandService gm = session.GetRequiredService(); foreach (string line in await gm.ExecuteAsync(command)) ConsolePrompt.Reply(line); }); await host.RunAsync();