Files
Ayay/SHH.CameraService/Core/CameraEngineWorker.cs
2026-01-16 07:23:56 +08:00

59 lines
2.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Ayay.SerilogLogs;
using Microsoft.Extensions.Hosting;
using Serilog;
using SHH.CameraSdk;
/// <summary>
/// 设备管理服务引擎 Worker
/// </summary>
public class CameraEngineWorker : BackgroundService
{
private readonly CameraManager _manager;
public CameraEngineWorker(CameraManager manager)
{
// 理由:严谨性检查,防止因配置错误导致的空指针崩溃
_manager = manager ?? throw new ArgumentNullException(nameof(manager));
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
var sysLog = Log.ForContext("SourceContext", LogModules.Core);
sysLog.Information("[Engine] 正在启动设备管理服务引擎...");
try
{
// 1. 理由:启动 SDK 内部加载流程(从本地存储恢复设备)
await _manager.StartAsync();
sysLog.Warning("[Engine] 设备管理服务引擎已启动...");
}
catch (Exception ex)
{
sysLog.Error($"[Engine] 设备管理服务引擎启动异常: {ex.Message}");
return; // 理由:核心组件失败,终止后续逻辑
}
// 2. 理由Worker 必须保持活跃状态,以便作为宿主生命周期的一部分
while (!stoppingToken.IsCancellationRequested)
{
// 你可以在这里定期输出一些状态统计
sysLog.Debug($"[Engine] 管理设备数: {_manager.GetAllCameras().Count()}");
await Task.Delay(TimeSpan.FromSeconds(30), stoppingToken);
}
}
public override async Task StopAsync(CancellationToken cancellationToken)
{
var sysLog = Log.ForContext("SourceContext", LogModules.Core);
sysLog.Debug($"[Engine] 正在执行优雅停机: {_manager.GetAllCameras()}");
try
{
// 理由:这是重构的核心。必须在 SDK 退出前释放所有非托管句柄
await _manager.DisposeAsync();
}
finally
{
await base.StopAsync(cancellationToken);
}
}
}