44 lines
1.0 KiB
C#
44 lines
1.0 KiB
C#
using ChromeboxFanControl;
|
|
|
|
namespace ChromeboxFanControlService;
|
|
|
|
public sealed class FanControlWorker : BackgroundService
|
|
{
|
|
private FanController? _fan;
|
|
private AppConfig? _config;
|
|
|
|
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
|
{
|
|
_config = AppConfig.LoadMerged();
|
|
_fan = new FanController(_config);
|
|
_fan.Start();
|
|
|
|
try
|
|
{
|
|
await Task.Delay(Timeout.Infinite, stoppingToken);
|
|
}
|
|
catch (OperationCanceledException)
|
|
{
|
|
/* shutdown */
|
|
}
|
|
}
|
|
|
|
public override async Task StopAsync(CancellationToken cancellationToken)
|
|
{
|
|
_fan?.Stop();
|
|
_fan?.Dispose();
|
|
if (_config != null)
|
|
{
|
|
try
|
|
{
|
|
EctoolRunner.RunSync(_config.EctoolPath, _config.AutoFanCtrlArgs);
|
|
}
|
|
catch
|
|
{
|
|
/* best effort restore autofan on shutdown */
|
|
}
|
|
}
|
|
await base.StopAsync(cancellationToken);
|
|
}
|
|
}
|