diff --git a/src/c#/GeneralUpdate.SystemService/Jobs/WillMessageJob.cs b/src/c#/GeneralUpdate.SystemService/Jobs/WillMessageJob.cs deleted file mode 100644 index 9adb6efc0d4bed4acc9ca81b30820430bb8d67c9..0000000000000000000000000000000000000000 --- a/src/c#/GeneralUpdate.SystemService/Jobs/WillMessageJob.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Quartz; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace GeneralUpdate.SystemService.Jobs -{ - internal class WillMessageJob : IJob - { - internal const string GROUP = "WillMessageGroup"; - internal const string TRIGGER = "WillMessageTrigger"; - private readonly ISchedulerFactory _schedulerFactory; - private IJobExecutionContext _jobExecutionContext; - - public WillMessageJob(ISchedulerFactory schedulerFactory) - { - _schedulerFactory = schedulerFactory; - } - - public Task Execute(IJobExecutionContext context) - { - _jobExecutionContext = context; - return ScanWillMessage(); - } - - private async Task ScanWillMessage() - { - // 暂停任务 - var scheduler = await _schedulerFactory.GetScheduler(); - await scheduler.PauseJob(_jobExecutionContext.JobDetail.Key); - } - } -} diff --git a/src/c#/GeneralUpdate.SystemService/PersistenceObjects/ProcessPersistence.cs b/src/c#/GeneralUpdate.SystemService/PersistenceObjects/ProcessPersistence.cs index 3f4dfc5c9100e400f6a1027dc873fcaf4c177474..bb4dd8da591526c8d32ec1e8fec4dc5b6a82a83f 100644 --- a/src/c#/GeneralUpdate.SystemService/PersistenceObjects/ProcessPersistence.cs +++ b/src/c#/GeneralUpdate.SystemService/PersistenceObjects/ProcessPersistence.cs @@ -1,31 +1,11 @@ namespace GeneralUpdate.SystemService.PersistenceObjects { - internal enum ProcessStatus - { - /// - /// Processing has not yet begun. - /// - NotStarted, - /// - /// Processing completed. - /// - Completed, - /// - /// Processing failure. - /// - Failed - } - internal class ProcessPersistence { - public required string Name { get; set; } - - public required string Path { get; set; } - - public required string BackupPath { get; set; } + public string Name { get; set; } - public ProcessStatus Status { get; set; } + public string Path { get; set; } - public DateTime CreateTime { get; set; } + public string BackupPath { get; set; } } } diff --git a/src/c#/GeneralUpdate.SystemService/PersistenceObjects/WillMessagePersistence.cs b/src/c#/GeneralUpdate.SystemService/PersistenceObjects/WillMessagePersistence.cs index 6e9f78d043286fa13b42b2d8206efcfd58ab8298..975f65ea4ee86b9a63872d7bad2c8096a1bf18da 100644 --- a/src/c#/GeneralUpdate.SystemService/PersistenceObjects/WillMessagePersistence.cs +++ b/src/c#/GeneralUpdate.SystemService/PersistenceObjects/WillMessagePersistence.cs @@ -1,7 +1,27 @@ namespace GeneralUpdate.SystemService.PersistenceObjects { + internal enum ProcessStatus + { + /// + /// Processing has not yet begun. + /// + NotStarted, + /// + /// Processing completed. + /// + Completed, + /// + /// Processing failure. + /// + Failed + } + internal class WillMessagePersistence where T : class { - public required List Messages { get; set; } + public List Messages { get; set; } + + public DateTime CreateTime { get; set; } + + public ProcessStatus Status { get; set; } } } diff --git a/src/c#/GeneralUpdate.SystemService/Program.cs b/src/c#/GeneralUpdate.SystemService/Program.cs index c4eee17d84428a0651dcb013174975df84954f3b..2b1b77e3bad474ba6d10d69fdef7c3a4c0937288 100644 --- a/src/c#/GeneralUpdate.SystemService/Program.cs +++ b/src/c#/GeneralUpdate.SystemService/Program.cs @@ -7,7 +7,7 @@ namespace GeneralUpdate.SystemService public static void Main(string[] args) { var builder = Host.CreateApplicationBuilder(args); - builder.Services.AddHostedService(); + builder.Services.AddHostedService(); var host = builder.Build(); host.Run(); } diff --git a/src/c#/GeneralUpdate.SystemService/Services/QuartzService.cs b/src/c#/GeneralUpdate.SystemService/Services/QuartzService.cs deleted file mode 100644 index dc693be1ddc0113503c4da3079ea1df7d0306eb5..0000000000000000000000000000000000000000 --- a/src/c#/GeneralUpdate.SystemService/Services/QuartzService.cs +++ /dev/null @@ -1,46 +0,0 @@ -using GeneralUpdate.SystemService.Jobs; -using Quartz; -using Quartz.Impl; - -namespace GeneralUpdate.SystemService.Services -{ - internal class QuartzService : BackgroundService - { - private readonly ILogger _logger; - private IJobDetail _job; - private ITrigger _trigger; - private IScheduler _scheduler; - - public QuartzService(ILogger logger) - { - _logger = logger; - } - - protected override async Task ExecuteAsync(CancellationToken stoppingToken) - { - _scheduler = await new StdSchedulerFactory().GetScheduler(); - await _scheduler.Start(); - - var runTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow); - - _job = JobBuilder.Create() - .WithIdentity(nameof(WillMessageJob), WillMessageJob.GROUP) - .Build(); - _trigger = TriggerBuilder.Create() - .WithIdentity(WillMessageJob.TRIGGER, WillMessageJob.GROUP) - .StartAt(runTime) - .WithSimpleSchedule(x => x - .WithIntervalInMinutes(2) - .RepeatForever()) - .Build(); - - await _scheduler.ScheduleJob(_job, _trigger); - } - - public override async Task StopAsync(CancellationToken cancellationToken) - { - await base.StopAsync(cancellationToken); - await _scheduler?.Shutdown(); - } - } -} diff --git a/src/c#/GeneralUpdate.SystemService/Services/WillMessageService.cs b/src/c#/GeneralUpdate.SystemService/Services/WillMessageService.cs new file mode 100644 index 0000000000000000000000000000000000000000..d4408e95e8a4a94a7f630e19ca6f86d3b9ed9dea --- /dev/null +++ b/src/c#/GeneralUpdate.SystemService/Services/WillMessageService.cs @@ -0,0 +1,45 @@ +using GeneralUpdate.SystemService.PersistenceObjects; + +namespace GeneralUpdate.SystemService.Services +{ + internal class WillMessageService : BackgroundService + { + private readonly string? _path; + private FileSystemWatcher _fileWatcher; + + public WillMessageService(IConfiguration configuration) => _path = configuration.GetValue("WatcherPath"); + + protected override Task ExecuteAsync(CancellationToken stoppingToken) + { + stoppingToken.Register(() => OnStopping()); + _fileWatcher = new FileSystemWatcher(_path); + // Watch for changes in LastAccess and LastWrite times, and the renaming of files or directories. + _fileWatcher.NotifyFilter = NotifyFilters.LastWrite; + // Only watch text files. + _fileWatcher.Filter = "*.*"; + _fileWatcher.Changed += OnChanged; + _fileWatcher.EnableRaisingEvents = true; + return Task.CompletedTask; + } + + private void OnChanged(object sender, FileSystemEventArgs e) + { + var willMessage = new WillMessagePersistence(); + switch (willMessage.Status) + { + case ProcessStatus.NotStarted: + break; + case ProcessStatus.Failed: + break; + case ProcessStatus.Completed: + break; + } + } + + private void OnStopping() + { + _fileWatcher.EnableRaisingEvents = false; + _fileWatcher.Dispose(); + } + } +} diff --git a/src/c#/GeneralUpdate.SystemService/appsettings.json b/src/c#/GeneralUpdate.SystemService/appsettings.json index b2dcdb67421cdf46236defda1c6fbf1d9eead5ee..1ac231fab880fe7f8109ba14d53b609731d81aba 100644 --- a/src/c#/GeneralUpdate.SystemService/appsettings.json +++ b/src/c#/GeneralUpdate.SystemService/appsettings.json @@ -4,5 +4,6 @@ "Default": "Information", "Microsoft.Hosting.Lifetime": "Information" } - } + }, + "WatcherPath": "C:\\generalupdate_willmessage" }