using SHH.CameraSdk;
///
/// 海康 SDK 扩展方法类
/// 功能:提供海康 API 调用结果校验的快捷扩展,简化错误处理逻辑
///
public static class HikExtensions
{
#region --- 结果校验扩展 (Result Validation Extensions) ---
///
/// 校验海康 API 调用结果是否成功
/// 功能:若结果为 false(调用失败),自动捕获海康错误码并抛出统一异常
///
/// 海康 API 调用返回的布尔结果(true=成功,false=失败)
/// 操作名称(用于异常信息描述,如“设备登录”“启动预览”)
/// 设备品牌(默认海康威视,无需手动指定)
/// API 调用失败时抛出,包含标准错误码与原始错误描述
public static void EnsureSuccess(this bool result, string actionName, DeviceBrand brand = DeviceBrand.HikVision)
{
// 调用成功则直接返回,无需后续处理
if (result) return;
// 1. 获取海康 SDK 最后一次操作的原始错误码
uint lastError = HikNativeMethods.NET_DVR_GetLastError();
// 2. 将海康原始错误码映射为系统统一标准错误码
CameraErrorCode standardCode = HikErrorMapper.Map(lastError);
// 3. 抛出统一异常,携带操作名称、标准错误码、原始错误描述等上下文
throw new CameraException(standardCode, $"{actionName} 失败", brand, (int)lastError)
.WithContext("Action", actionName) // 附加操作名称上下文
.WithContext("HikDesc", HikErrorMapper.GetRawDescription(lastError)); // 附加海康原始错误描述
}
#endregion
}