Files
Fileinterface_Cron_Job/FileinterfaceCronScheduler/Scheduler/SchedulerRuntime.cs
2026-08-19 19:27:41 +02:00

58 lines
2.0 KiB
C#

using System;
namespace FileInterface.Scheduler
{
public sealed class SchedulerRuntime : IDisposable
{
private readonly CronScheduler _scheduler;
private readonly FileSystemWatcherManager _watcherManager;
private readonly WebAdminServer _web;
private readonly IDisposable _ownedResource;
private bool _disposed;
public SchedulerRuntime(ICustomFunctionInvoker invoker, SchedulerOptions options)
: this(invoker, options, null)
{
}
public SchedulerRuntime(ICustomFunctionInvoker invoker, SchedulerOptions options, IDisposable ownedResource)
{
if (invoker == null) throw new ArgumentNullException("invoker");
if (options == null) options = new SchedulerOptions();
_ownedResource = ownedResource;
var cronRepository = new CronJobRepository(options.ConfigFile);
var watcherRepository = new WatcherJobRepository(options.WatcherConfigFile);
var log = new JobLog(5000);
var cronExecutor = new CronJobExecutor(invoker, log);
var watcherExecutor = new WatcherJobExecutor(invoker, log);
_scheduler = new CronScheduler(cronRepository, cronExecutor, log);
_watcherManager = new FileSystemWatcherManager(watcherRepository, watcherExecutor, log);
_web = new WebAdminServer(cronRepository, _scheduler, watcherRepository, _watcherManager, log, options);
}
public void Start()
{
_scheduler.Start();
_watcherManager.Start();
_web.Start();
}
public void Dispose()
{
if (_disposed) return;
_disposed = true;
try { _web.Dispose(); }
finally
{
try { _watcherManager.Dispose(); }
finally
{
try { _scheduler.Dispose(); }
finally { if (_ownedResource != null) _ownedResource.Dispose(); }
}
}
}
}
}