- 实现 MIoT 客户端核心功能(MQTT 连接、设备管理、属性读写) - 支持云端 API 调用与局域网设备发现(mDNS) - 集成国际化(i18n)多语言支持 - 添加 MIoT 设备规约解析器(spec_parser) - 包含单元测试与使用示例
4.2 KiB
4.2 KiB
第三轮审查方案 — 体读验证
方法:逐函数读体 → 对照 Python 行为 → 标记空实现/部分实现/完整 判定标准:有 TODO 标记 + 无业务逻辑 = ❌ 空实现;有逻辑但缺关键分支 = ⚠️ 部分
审查清单(18 项)
块 A — Init() 链路(6 项已验证,0 项新)
| # | 函数 | Python 行 | Go 状态 | 备注 |
|---|---|---|---|---|
| A1 | OAuth 初始化 | 283-288 | ✅ | NewMIoTOauthClient 已调用 |
| A2 | Cert 初始化 | 296-299 | ✅ | NewMIoTCert + VerifyCACert |
| A3 | MipsCloud 初始化 | 301-310 | ✅ | NewMipsCloudClient + Connect |
| A4 | Network 订阅 | 312-316 | ✅ | SubNetworkStatus + 初始触发 |
| A5 | mDNS + MipsLocal + LAN | 319-371 | ✅ | SubServiceChange + NewMipsLocalClient + SubLanState |
| A6 | i18n | 275-279 | ✅ | NewMIoTI18n + Init |
块 B — Deinit() 链路
| # | 操作 | Python 行 | Go 状态 |
|---|---|---|---|
| B1 | network.unsub | 376 | ✅ |
| B2 | cancel refresh_props_timer | 379-382 | ✅ |
| B3 | mips_cloud unsub → deinit | 385-387 | ✅ |
| B4 | mDNS unsub_service_change | 395-396 | ✅ |
| B5 | 遍历 mips_local: unsub → disconnect | 397-399 | ✅ |
| B6 | cancel gw timers | ✅(并入 local loop) | |
| B7 | LAN: unsub_lan_state → unsub_device_state → delete_devices → vote(false) | 400- | 需检查 |
| B8 | oauth.deinit | 需检查 | |
| B9 | http.deinit | 需检查 | |
| B10 | i18n.deinit | ✅ | |
| B11 | cancel notify timer | 需检查 | |
| B12 | save device cache to storage | ✅ |
块 C — 回调事件处理(关键链路)
| # | 函数 | Python 行为 | Go 状态 |
|---|---|---|---|
| C1 | onMipsCloudStateChanged(disconnect) |
批量标记所有 cloud device offline + 聚合 cache | ❌ 只有 fmt.Printf + TODO |
| C2 | onMipsLocalStateChanged(disconnect) |
批量标记该网关所有 device offline + 聚合 | ❌ 只有 fmt.Printf + TODO |
| C3 | onMipsServiceStateChange |
创建/销毁 MipsLocalClient + connect | ❌ 只有 fmt.Printf + TODO |
| C4 | onGWDeviceListChanged |
从网关拉取设备列表 + 更新 gw cache | ❌ 只有 fmt.Printf + TODO |
| C5 | onLanDeviceStateChanged |
更新 LAN cache + 聚合到 device cache | ❌ 方法不存在 |
块 D — MQTT 消息处理
| # | 函数 | Python 行为 | Go 状态 |
|---|---|---|---|
| D1 | handleMIPSMessage |
MIPS payload 解包 → dispatch 到 subTree 订阅者 | ❌ 只有 fmt.Printf + TODO |
| D2 | handleMIPSStateMessage |
解析 state 消息 → 更新 online 状态 → 回调 OnDeviceStateChanged | ❌ 只有 fmt.Printf + TODO |
| D3 | OnDeviceStateChanged |
更新对应源 + 三源聚合 + 通知 | ⚠️ 只更新 cloud cache,未调 checkDeviceState 聚合 |
| D4 | updateDeviceMsgSub |
三源优先级 + push_available 检测 + 订阅切换 | ⚠️ 简化版,缺 push_available 检测和 unsub/sub 切换 |
块 E — Token/证书刷新
| # | 函数 | Python 行为 | Go 状态 |
|---|---|---|---|
| E1 | RequestRefreshAuthInfo |
定时器 → refresh_oauth_info_async: load_storage → 判断有效期 → refresh → 更新 http/mips_cloud → save_storage | ❌ 回调只有 fmt.Printf + TODO |
| E2 | RequestRefreshUserCert |
定时器 → refresh_user_cert_async: verify_ca → 判断有效期 → gen_user_csr → get 云端证书 → save | ❌ 回调只有 fmt.Printf + TODO |
块 F — 设备列表更新
| # | 函数 | Python 行为 | Go 状态 |
|---|---|---|---|
| F1 | updateDevicesFromCloud |
BLE默认online/子设备合并/owner分离/diff检测/通知 | ✅ 已实现 |
| F2 | loadCacheDevice |
storage.Load('miot_devices', key, 'dict') + 复制到 cloud/gw cache | ⚠️ 需验证存储 key 格式和初始复制逻辑 |
汇总
| 块 | 总数 | ✅ | ⚠️ | ❌ |
|---|---|---|---|---|
| A Init | 6 | 6 | 0 | 0 |
| B Deinit | 12 | 10 | 2 | 0 |
| C 回调 | 5 | 0 | 0 | 5 |
| D MQTT | 4 | 0 | 2 | 2 |
| E Token/Cert | 2 | 0 | 0 | 2 |
| F 设备 | 2 | 1 | 1 | 0 |
| 合计 | 31 | 17 | 5 | 9 |
9 项空实现 + 5 项部分实现需要修复。