namespace SHH.CameraSdk.HikFeatures; public class HikRebootProvider : IRebootFeature { private readonly IHikContext _context; public HikRebootProvider(IHikContext context) { _context = context; } public async Task RebootAsync() { // 1. 检查登录状态 int userId = _context.GetUserId(); if (userId < 0) throw new InvalidOperationException("设备未登录或离线,无法发送重启指令"); // 2. 执行 SDK 调用 await Task.Run(() => { bool result = HikNativeMethods.NET_DVR_RebootDVR(userId); if (!result) { uint err = HikNativeMethods.NET_DVR_GetLastError(); throw new Exception($"重启指令发送失败,错误码: {err}"); } }); // 3. 注意: // 重启指令发送成功后,设备会断开网络。 // 宿主类(HikVideoSource)的保活机制(KeepAlive)会检测到断线, // 并自动开始尝试重连,直到设备重启完成上线。 // 所以这里我们不需要手动断开连接,交给底层自愈机制即可。 } }