From 3d37b1a9816a852306463bdf7dee140dbd065e68 Mon Sep 17 00:00:00 2001 From: Juster Zhu Date: Fri, 1 Dec 2023 23:18:31 +0800 Subject: [PATCH] Add File Monitor --- .../Jobs/WillMessageJob.cs | 35 -------------- .../PersistenceObjects/ProcessPersistence.cs | 26 ++--------- .../WillMessagePersistence.cs | 22 ++++++++- src/c#/GeneralUpdate.SystemService/Program.cs | 2 +- .../Services/QuartzService.cs | 46 ------------------- .../Services/WillMessageService.cs | 45 ++++++++++++++++++ .../appsettings.json | 3 +- 7 files changed, 72 insertions(+), 107 deletions(-) delete mode 100644 src/c#/GeneralUpdate.SystemService/Jobs/WillMessageJob.cs delete mode 100644 src/c#/GeneralUpdate.SystemService/Services/QuartzService.cs create mode 100644 src/c#/GeneralUpdate.SystemService/Services/WillMessageService.cs diff --git a/src/c#/GeneralUpdate.SystemService/Jobs/WillMessageJob.cs b/src/c#/GeneralUpdate.SystemService/Jobs/WillMessageJob.cs deleted file mode 100644 index 9adb6ef..0000000 --- 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 3f4dfc5..bb4dd8d 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 6e9f78d..975f65e 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 c4eee17..2b1b77e 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 dc693be..0000000 --- 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 0000000..d4408e9 --- /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 b2dcdb6..1ac231f 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" } -- Gitee