public static async Task Main(string[] args) { Console.WriteLine(DBCToolsExtensions.BuildToolsWelcomeMessage("CreateJSON")); //Try to load configuration file Config = new ApplicationConfigurationLoader().BuildConfigFile(); if (!Directory.Exists(Config.DiffOutputPath)) { Directory.CreateDirectory(Config.DiffOutputPath); } Parallel.ForEach(Directory.GetFiles(Config.DbcOutputPath).Select(Path.GetFileNameWithoutExtension), async dbcFile => { DbcTypeParser parser = new DbcTypeParser(); if (!parser.HasDbcType(dbcFile)) { //TODO: We should create a logger specifically for Program. if (Config.LoggingLevel >= LogLevel.Warning) { Console.WriteLine($"Encountered unknown DBC Type: {dbcFile}. Will skip."); } return; } IServiceProvider provider = new JSONContainerServiceBuilder(Config, dbcFile).Build(); using (var scope = provider.CreateScope()) { ILogger <Program> logger = scope.ServiceProvider.GetService <ILogger <Program> >(); try { if (logger.IsEnabled(LogLevel.Information)) { logger.LogInformation($"Populating CSV file for DBC: {dbcFile}"); } //This may look silly but we want to support the 50+ DBC types so //it needs to be handle magically otherwise we'd have to write code for each one. IDbcTargetFillable tableFiller = scope.ServiceProvider.GetService <IDbcTargetFillable>(); await tableFiller.FillAsync() .ConfigureAwait(false); } catch (Exception e) { if (logger.IsEnabled(LogLevel.Error)) { logger.LogError($"Encountered Exception: {e.Message} \n\n Stack: {e.StackTrace}"); } throw; } } }); Console.WriteLine("Finished. Press any key!"); }
static async Task Main(string[] args) { //Try to load configuration file Config = new ApplicationConfigurationLoader().BuildConfigFile(); //TODO: This is just test code, we want to handle inputs better. Console.WriteLine($"Will create tables and database if they do not exist."); //TODO: We shouldn't check everytime we create a DBC table. Do this elsewhere await CreateDatabaseIfNotCreated(); ConsoleLogger defaultLogger = new ConsoleLogger("Console", (s, level) => level >= Config.LoggingLevel, false); foreach (string dbcFile in Directory.GetFiles("DBC").Select(Path.GetFileNameWithoutExtension)) { //TODO: Register in IoC DbcTypeParser parser = new DbcTypeParser(); if (!parser.HasDbcType(dbcFile)) { //TODO: We should create a logger specifically for Program. if (defaultLogger.IsEnabled(LogLevel.Warning)) { defaultLogger.LogWarning($"Encountered unknown DBC Type: {dbcFile}. Will skip."); } continue; } //We should check if we know a DBC file of this type. IServiceProvider provider = new CreateDatabaseContainerServiceBuilder(Config, dbcFile).Build(); Stopwatch watch = new Stopwatch(); watch.Start(); using (var scope = provider.CreateScope()) { ILogger <Program> logger = scope.ServiceProvider.GetService <ILogger <Program> >(); try { if (logger.IsEnabled(LogLevel.Information)) { logger.LogInformation($"Populating table for DBC: {dbcFile}"); } //This may look silly but we want to support the 50+ DBC types so //it needs to be handle magically otherwise we'd have to write code for each one. IDbcTargetFillable tableFiller = scope.ServiceProvider.GetService <IDbcTargetFillable>(); await tableFiller.FillAsync(); } catch (Exception e) { if (logger.IsEnabled(LogLevel.Error)) { logger.LogError($"Encountered Exception: {e.Message} \n\n Stack: {e.StackTrace}"); } throw; } } watch.Stop(); if (defaultLogger.IsEnabled(LogLevel.Information)) { defaultLogger.LogInformation($"Created Table: {dbcFile} In Milliseconds: {watch.ElapsedMilliseconds}"); } } defaultLogger.LogWarning("Finished. Press any key!"); Console.ReadKey(); }