-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathProgram.cs
More file actions
86 lines (75 loc) · 3.07 KB
/
Program.cs
File metadata and controls
86 lines (75 loc) · 3.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
using System.Reflection;
using FluentMigrator.Runner;
using FluentMigrator.Runner.Initialization;
using LinqToDB;
using LinqToDB.DataProvider.MySql;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Serilog;
using Vint.Core.Battle.Autopilot;
using Vint.Core.Battle.Lobby;
using Vint.Core.Chat.Commands;
using Vint.Core.Config;
using Vint.Core.Database;
using Vint.Core.Matchmaking;
using Vint.Core.Quests;
using Vint.Core.Server.API;
using Vint.Core.Server.Game;
using Vint.Core.Server.Game.Protocol;
using Vint.Core.Server.Static;
using Vint.Core.Utils;
EmbedIO.Net.EndPointManager.UseIpv6 = false;
Swan.Logging.Logger.UnregisterLogger<Swan.Logging.ConsoleLogger>();
Directory.SetCurrentDirectory(AppContext.BaseDirectory);
HostApplicationBuilder builder = Host.CreateApplicationBuilder(new HostApplicationBuilderSettings {
Args = args
});
string dbConnectionString = builder.Configuration.GetConnectionString("Vint")!;
DbConnection.DefaultOptions = new DataOptions<DbConnection>(GetDataOptions());
RunMigrations();
builder.Services
.AddSerilog(config => config.ReadFrom.Configuration(builder.Configuration))
.AddTransient<BotBuilder>()
.AddSingleton<Protocol>()
.AddSingleton<QuestManager>()
.AddSingleton<LobbyProcessor>()
.AddSingleton<RatingMatchmakingProcessor>()
.AddSingleton<ArcadeMatchmakingProcessor>()
.AddSingleton<IChatCommandProcessor>(serviceProvider => {
ChatCommandProcessor chatCommandProcessor = new(serviceProvider);
chatCommandProcessor.RegisterCommands();
return chatCommandProcessor;
})
.AddHostedSingletonService<ApiServer>()
.AddHostedSingletonService<StaticServer>()
.AddHostedSingletonService<GameServer>();
using IHost host = builder.Build();
await Task.WhenAll(
Task.Run(ConfigManager.InitializeCache),
ConfigManager.InitializeMapInfos(),
ConfigManager.InitializeChatCensorship(),
Task.Run(async () => {
await ConfigManager.InitializeNodes();
await ConfigManager.InitializeConfigs();
await ConfigManager.InitializeGlobalEntities();
}));
await host.RunAsync();
return;
void RunMigrations() {
IServiceProvider serviceProvider = new ServiceCollection()
.AddSerilog(config => config.ReadFrom.Configuration(builder.Configuration))
.AddFluentMigratorCore()
.ConfigureRunner(runnerBuilder => runnerBuilder
.AddMySql8()
.WithGlobalConnectionString(dbConnectionString)
.ScanIn(Assembly.GetExecutingAssembly()).For.Migrations())
.Configure<RunnerOptions>(opt => opt.AllowBreakingChange = false) // SET TO TRUE ONLY IF YOU'RE SURE THAT YOU WANT TO ALLOW BREAKING CHANGES TO THE DATABASE!
.BuildServiceProvider();
using IServiceScope scope = serviceProvider.CreateScope();
IMigrationRunner migrationRunner = scope.ServiceProvider.GetRequiredService<IMigrationRunner>();
migrationRunner.MigrateUp();
}
DataOptions GetDataOptions() =>
new DataOptions()
.UseMySql(dbConnectionString, MySqlVersion.MariaDB10);