private static async Task RunTestWithLoadedConfig(ILogger sublogger, string ConfigDir) { Version v = Assembly.GetExecutingAssembly().GetName().Version; DirectoryInfo appDir = Directory.GetParent(Assembly.GetEntryAssembly().Location); DirectoryInfo appParentDir = new DirectoryInfo(appDir.Parent.FullName); DirectoryInfo appLogDir = new DirectoryInfo($"{appParentDir.FullName}{Path.DirectorySeparatorChar}logs"); string rootPath = ConfigDir; //$"{Environment.GetFolderPath(Environment.SpecialFolder.Desktop)}{Path.DirectorySeparatorChar}"; string repositoryConfigPath = $"{rootPath}{Path.DirectorySeparatorChar}repository.xml.config"; string machineSubscriptionsPath = $"{rootPath}{Path.DirectorySeparatorChar}machines.xml.config"; var configMananger = new RepositoryFactory().LoadFrom(repositoryConfigPath); var influxServerAddress = new Uri($"http://{configMananger.Config.DatabaseIPaddress}:{configMananger.Config.DatabasePort}"); var ping = new Ping(); var reply = ping.Send(influxServerAddress.Host); if (reply.Status != IPStatus.Success) { sublogger.Fatal("Ping to Database Server Failed. Exiting..."); return; } var repo = new MachineRepository(configMananger.Config.DatabaseIPaddress, databaseName: configMananger.Config.DatabaseName, port: Convert.ToInt32(configMananger.Config.DatabasePort)); if (!repo.CanConnect()) { sublogger.Fatal("Can't Connect to DB Server. Exiting..."); return; } var _pressWriterInflux = new RepositoryWriterPressInflux(repo, sublogger); var _messageProcessor = new MessageProcessor(sublogger); var machines = new CollectorManagerFactory().LoadFromFile(machineSubscriptionsPath).WithRepoWriter(_pressWriterInflux).WithLogger(sublogger).Build(); var topicHandlers = new TopicHandlerFactory().AddMachines(machines).Build(); _messageProcessor.AddMachineTopicHandlers(topicHandlers); var _collector = new MQTTCollector(_messageProcessor, sublogger); Console.WriteLine("Starting Collection"); _collector.Start(); _messageProcessor.StartProcessing(); Console.WriteLine("Waiting indefinitely"); await _collector.WaitUntilStoppedAsync(); }