using File_Watcher.Models; using Microsoft.Extensions.Hosting.WindowsServices; using System.Data; namespace File_Watcher; public partial class Worker : BackgroundService { private readonly bool _IsWindowsService; private readonly ILogger _Logger; private readonly AppSettings _AppSettings; public Worker(IServiceProvider serviceProvider, ILogger logger, AppSettings appSettings, List collection) { _Logger = logger; _AppSettings = appSettings; logger.LogInformation("{buildNumber}-{gitCommitSeven}", _AppSettings.BuildNumber, _AppSettings.GitCommitSeven); try { logger.LogInformation("<{folder}>", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)); } catch (Exception) { } _IsWindowsService = collection.Contains(nameof(WindowsServiceLifetime)); } private void BodyInner(CancellationToken cancellationToken) { _Logger.LogInformation("A) Next execute will be at {date}", DateTime.Now.AddMilliseconds(_AppSettings.MillisecondsDelay).ToString("yyyy-MM-dd hh:mm:ss.fff tt")); if (!Directory.Exists(_AppSettings.WatchDirectory)) _ = Directory.CreateDirectory(_AppSettings.WatchDirectory); else { _ = _AppSettings.Helper switch { nameof(Helpers.HelperNuget) => Helpers.HelperNuget.Sync(_AppSettings, _Logger), nameof(Helpers.HelperTCP) => Helpers.HelperTCP.ReadWrite(_AppSettings, _Logger), nameof(Helpers.HelperCompass) => Helpers.HelperCompass.CopyFile(_AppSettings, _Logger), nameof(Helpers.HelperStratus) => Helpers.HelperStratus.MoveFile(_AppSettings, _Logger), nameof(Helpers.HelperEAFLog) => Helpers.HelperEAFLog.DeleteFiles(_AppSettings, _Logger), nameof(Helpers.HelperInfinityQS) => Helpers.HelperInfinityQS.RunMI(_AppSettings, _Logger), nameof(Helpers.HelperEventLog) => Helpers.HelperEventLog.ClearEventLogs(_AppSettings, _Logger), nameof(Helpers.HelperWaferCounter) => Helpers.HelperWaferCounter.MoveFile(_AppSettings, _Logger), nameof(Helpers.HelperEAFProgramData) => Helpers.HelperEAFProgramData.MoveFiles(_AppSettings, _Logger), nameof(Helpers.HelperSerial) => Helpers.HelperSerial.ReadWrite(_AppSettings, _Logger, cancellationToken), nameof(Helpers.HelperMetrologyFiles) => Helpers.HelperMetrologyFiles.SortAndDelete(_AppSettings, _Logger), nameof(Helpers.HelperEDADatabase) => Helpers.HelperEDADatabase.SaveDataCollectionPlans(_AppSettings, _Logger, cancellationToken), _ => throw new NotSupportedException() }; } _Logger.LogInformation("B) Next execute will be at {date}", DateTime.Now.AddMilliseconds(_AppSettings.MillisecondsDelay).ToString("yyyy-MM-dd hh:mm:ss.fff tt")); } private async Task Body(CancellationToken cancellationToken) { if (!_IsWindowsService) throw new EvaluateException("Set break point and skip!"); if (!_IsWindowsService) { for (int i = 0; i < int.MaxValue; i++) { BodyInner(cancellationToken); Thread.Sleep(500); } } while (_IsWindowsService && !cancellationToken.IsCancellationRequested) { BodyInner(cancellationToken); await Task.Delay(_AppSettings.MillisecondsDelay, cancellationToken); } } protected override async Task ExecuteAsync(CancellationToken cancellationToken) => await Body(cancellationToken); }