95 lines
5.1 KiB
C#
95 lines
5.1 KiB
C#
using File_Watcher.Models;
|
|
using Microsoft.Extensions.Hosting.WindowsServices;
|
|
using System.Data;
|
|
|
|
namespace File_Watcher;
|
|
|
|
public partial class Worker : BackgroundService
|
|
{
|
|
|
|
private bool? _First;
|
|
private readonly bool _IsWindowsService;
|
|
private readonly ILogger<Worker> _Logger;
|
|
private readonly AppSettings _AppSettings;
|
|
private readonly IHttpClientFactory _HttpClientFactory;
|
|
|
|
public Worker(IHttpClientFactory httpClientFactory, ILogger<Worker> logger, IServiceProvider serviceProvider, AppSettings appSettings, List<string> collection)
|
|
{
|
|
_Logger = logger;
|
|
_AppSettings = appSettings;
|
|
_HttpClientFactory = httpClientFactory;
|
|
logger.LogInformation(string.Join(Environment.NewLine, collection));
|
|
try
|
|
{ logger.LogInformation("<{folder}>", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)); }
|
|
catch (Exception) { }
|
|
_First = null;
|
|
_IsWindowsService = collection.Contains(nameof(WindowsServiceLifetime));
|
|
}
|
|
|
|
public override Task StopAsync(CancellationToken cancellationToken)
|
|
{
|
|
if (_AppSettings.FileWatcherConfiguration.Helper == nameof(Helpers.HelperCamstarOracle))
|
|
Helpers.HelperCamstarOracle.Heartbeat(_AppSettings, _HttpClientFactory, _Logger, Infineon.Monitoring.MonA.State.Down, cancellationToken);
|
|
return base.StopAsync(cancellationToken);
|
|
}
|
|
|
|
protected override async Task ExecuteAsync(CancellationToken cancellationToken) =>
|
|
await Body(cancellationToken);
|
|
private async Task Body(CancellationToken cancellationToken)
|
|
{
|
|
if (!_IsWindowsService)
|
|
{
|
|
_Logger.LogInformation("Set break point and skip to run {_AppSettings.FileWatcherConfiguration.Helper}!", _AppSettings.FileWatcherConfiguration.Helper);
|
|
throw new EvaluateException($"Set break point and skip to run {_AppSettings.FileWatcherConfiguration.Helper}!");
|
|
}
|
|
if (!_IsWindowsService)
|
|
{
|
|
for (int i = 0; i < int.MaxValue; i++)
|
|
{
|
|
BodyInner(cancellationToken);
|
|
Thread.Sleep(_AppSettings.FileWatcherConfiguration.MillisecondsDelay);
|
|
}
|
|
}
|
|
while (_IsWindowsService && !cancellationToken.IsCancellationRequested)
|
|
{
|
|
BodyInner(cancellationToken);
|
|
await Task.Delay(_AppSettings.FileWatcherConfiguration.MillisecondsDelay, cancellationToken);
|
|
}
|
|
}
|
|
|
|
private void BodyInner(CancellationToken cancellationToken)
|
|
{
|
|
_Logger.LogInformation("A) Next execute will be at {date}", DateTime.Now.AddMilliseconds(_AppSettings.FileWatcherConfiguration.MillisecondsDelay).ToString("yyyy-MM-dd hh:mm:ss.fff tt"));
|
|
if (_First is null || _First.Value)
|
|
{
|
|
_First = false;
|
|
if (_AppSettings.FileWatcherConfiguration.Helper == nameof(Helpers.HelperCamstarOracle))
|
|
Helpers.HelperCamstarOracle.Heartbeat(_AppSettings, _HttpClientFactory, _Logger, Infineon.Monitoring.MonA.State.Up, cancellationToken);
|
|
}
|
|
if (!Directory.Exists(_AppSettings.FileWatcherConfiguration.WatchDirectory))
|
|
_ = Directory.CreateDirectory(_AppSettings.FileWatcherConfiguration.WatchDirectory);
|
|
else
|
|
{
|
|
_ = _AppSettings.FileWatcherConfiguration.Helper switch
|
|
{
|
|
nameof(Helpers.HelperNuget) => Helpers.HelperNuget.Sync(_AppSettings, _Logger),
|
|
nameof(Helpers.HelperTCP) => Helpers.HelperTCP.ReadWrite(_AppSettings, _Logger),
|
|
nameof(Helpers.HelperISO) => Helpers.HelperISO.DirectoryToISO(_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.Select(_AppSettings, _Logger),
|
|
nameof(Helpers.HelperEventLog) => Helpers.HelperEventLog.ClearEventLogs(_AppSettings, _Logger),
|
|
nameof(Helpers.HelperWaferCounter) => Helpers.HelperWaferCounter.MoveFile(_AppSettings, _Logger),
|
|
nameof(Helpers.HelperSerial) => Helpers.HelperSerial.ReadWrite(_AppSettings, _Logger, cancellationToken),
|
|
nameof(Helpers.HelperMetrologyFiles) => Helpers.HelperMetrologyFiles.SortAndDelete(_AppSettings, _Logger),
|
|
nameof(Helpers.HelperCamstarOracle) => Helpers.HelperCamstarOracle.Check(_AppSettings, _Logger, cancellationToken),
|
|
nameof(Helpers.DeterministicHashCodeHelper) => Helpers.DeterministicHashCodeHelper.WindowsWork(_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.FileWatcherConfiguration.MillisecondsDelay).ToString("yyyy-MM-dd hh:mm:ss.fff tt"));
|
|
}
|
|
|
|
} |