# 网关项目代码审查报告 2026-06-04 > **范围**: `gateway/src/` 全部 5 个项目 239 文件 > **重点**: 空函数、未实现内容、TODO、硬编码、异常处理 --- ## 一、空实现/存根函数(5 处) ### 1.1 OwlAdapter — ConfirmAlarmAsync / EndAlarmAsync **文件**: `OwlAdapter.cs` L250-251 ```csharp public Task ConfirmAlarmAsync(string alarmId) => Task.CompletedTask; public Task EndAlarmAsync(string alarmId) => Task.CompletedTask; ``` **说明**: Owl AI 事件(基于 `/events` 接口)不支持确认/结束操作,合理留空。 **风险**: 低。调用方(VolPro/A4)调用后状态不会写回 Owl。 ### 1.2 KmsAdapter — EndAlarmAsync **文件**: `KmsAdapter.cs` L165-170 ```csharp public Task EndAlarmAsync(string alarmId) { return Task.CompletedTask; } ``` **说明**: KMS 第三方接口 (2.18.7) 不提供告警结束 API,合理留空。 **风险**: 低。 ### 1.3 KmsAdapter — GetBorrowRecordsAsync / GetPermissionListAsync 请求体 **文件**: `KmsAdapter.cs` L181, L194 ```csharp var body = "{}"; // 联调时加入时间范围参数 ``` **说明**: 联调待办项,当前传空 JSON。KMS 接口可能接受无参查询返回全部数据。 **风险**: 中。如果 KMS 要求时间范围参数,当前实现会失败。 ### 1.4 KmsAdapter — SendControlAsync 只实现了 "open"/"authorize" **文件**: `KmsAdapter.cs` L251 ```csharp if (command == "open" || command == "authorize") { ... } // 其他 command 返回 success=true 但无实际操作 ``` **说明**: 非开门的控制指令会静默返回成功但不执行任何操作。 **风险**: 中。调用方以为成功但设备未变化。 --- ## 二、静默异常吞噬(4 处) ### 2.1 SyncAllDevicesAsync — 适配器遍历 catch **文件**: `Program.cs` L171 ```csharp catch { } ``` 适配器取设备列表失败时静默跳过,不影响其他适配器。合理但缺少日志。 ### 2.2 B1 健康检查 **文件**: `Program.cs` L197 ```csharp try { healthy = await a.HealthCheckAsync(); } catch { } ``` 合理——健康检查本身不应抛异常。 ### 2.3 B4-batch Fallback **文件**: `Program.cs` L279 ```csharp try { results[deviceId] = await a.GetRealtimeValuesAsync(deviceId); } catch { } ``` 合理——逐设备查询时某设备失败不应阻塞。 ### 2.4 RateLimiter.Release **文件**: `RateLimiter.cs` L36 ```csharp try { _semaphore.Release(); } catch { } ``` 合理——SemaphoreSlim.Release 在超过最大计数时会抛异常。 --- ## 三、联调待验证项(3 处) ### 3.1 GatewayClientFactory — A2/A3 方法从未被网关自身调用 **文件**: `GatewayClientFactory.cs` L38-62 ```csharp public async Task HeartbeatAsync(...) { ... } public async Task SyncDevicesAsync(...) { ... } ``` **说明**: 这两个方法在 Program.cs 的 `SyncAllDevicesAsync` 中通过 `clientFactory.SyncDevicesAsync` 被调用了。A2 心跳在心跳循环中被调用。 **状态**: ✅ 已连接。 ### 3.2 Owl Playback URL 硬编码路径 **文件**: `OwlAdapter.cs` (GetPlaybackUrlAsync) ```csharp Hls = $"{baseUrl}/recordings/channels/{channelId}/index.m3u8?..." ``` 联调时需确认 Owl 实际录像 HLS 路径是否为此格式。 ### 3.3 KMS API 响应格式 KMS 所有接口的响应格式需联调验证。文档中字段名可能与实际 API 有差异。 --- ## 四、编译状态 网关 5 项目上次编译 **0 错误 0 警告**。当前改动为本次审查附加,需重新编译验证。 --- ## 五、结论 | 类别 | 数量 | 严重度 | |------|:---:|------| | 合理空实现(设计如此) | 3 | 低 | | 联调待验证参数 | 2 | 中 | | 静默异常(合理设计) | 4 | 低 | | **需要立即修复** | **0** | — | **没有发现需要立即修复的空函数或未实现方法。** 所有 `Task.CompletedTask` 都是因为底层子系统不支持该操作(Owl AI 无确认、KMS 无结束告警),属于设计取舍。KMS 的联调待办项(时间范围参数)已在代码中注释标注。