feat: 接线上行帧分发到 message/identity/presence/group
This commit is contained in:
+40
-3
@@ -52,12 +52,12 @@
|
||||
- 备选方案:分文件多阶段接线。
|
||||
- 影响:进程可对外登录/注册/握手。
|
||||
|
||||
2. **未接线 / 未完成部分**
|
||||
2. **未接线 / 未完成部分(已被 L-UPLINK 部分取代)**
|
||||
- 原条款:上行应用帧完整分发到 identity/group/presence/message 业务方法。
|
||||
- 实际做法:`Session` 处理 hello/logout;其余 `HandleUplink` 仍为 `StubUplinkHandler`(不解析 send/ack/group 等)。管理注册设置 HTTP(A3)未实现,测试直接写 `settings` 表。群/在线模块已构造并注入 Downlink,但无上行入口调用。
|
||||
- 实际做法(L-WIRE 当时):`Session` 处理 hello/logout;其余 `HandleUplink` 仍为 Stub。管理注册设置 HTTP(A3)未实现,测试直接写 `settings` 表。
|
||||
- 原因:本波强制三件验收;完整协议分发属后续波次。
|
||||
- 备选方案:本波同时实现 HandleUplink 大 multiplex。
|
||||
- 影响:端连上后除握手/logout 外业务帧尚无 resp;F03–F16 等仍依赖后续接线。
|
||||
- 影响:见 L-UPLINK。
|
||||
|
||||
3. **listen.addr 始终写入**
|
||||
- 原条款:listener N1 仅端口 0 写文件;T0.1 超集为启动即写。
|
||||
@@ -66,6 +66,43 @@
|
||||
- 备选方案:改 listener 始终写。
|
||||
- 影响:固定端口也会有地址文件。
|
||||
|
||||
### L-UPLINK 2026-09-30
|
||||
|
||||
1. **HandleUplink 分发到已有业务服务**
|
||||
- 原条款:TASKS 总控接线;DEVELOPMENT 第 6 节上行帧由服务端处理后回 `resp`;群事件/在线通知/消息走下行。
|
||||
- 实际做法:`cmd/nixmsg/uplink.go` 的 `appUplink` 在已握手连接上解码并调用 `message`/`identity`/`presence`/`group` 的既有方法;结果编成 `resp` 经 `PublishDown`(QoS 1)回本连接。`Session` 仍独占 `hello`/`self.logout` 与未握手 `not_ready`。`serve` 把四个 App 与 broker Downlink 注入 uplink。不重写业务状态机。
|
||||
- 原因:main 上业务实现已齐,缺上行入口。
|
||||
- 备选方案:各包自建 MQTT 钩子(与 port 契约不符)。
|
||||
- 影响:端侧 send/ack/recall/status/unlock/self.*/presence.*/directory.list/group.* 可走真实进程。
|
||||
|
||||
2. **presence.get 未知编号编码**
|
||||
- 原条款:DEVELOPMENT 6.5「未知编号为 not_found」;`StatusItem.NotFound` 为内部标记。
|
||||
- 实际做法:`presence.EncodeGetData` 薄封装,resp data 为 `{"items":[...]}`;未知项 `{"id","not_found":true}`,已知项含 `id`/`online`/`since_ms`。
|
||||
- 原因:Service 层未规定 JSON 形状,接线需固定可编解码形式。
|
||||
- 备选方案:整请求失败 `not_found`;或把 `not_found` 塞进 `online` 旁字符串字段。
|
||||
- 影响:SDK 若只认 items 数组两种形状均可(Go SDK 已兼容 wrap/array)。
|
||||
|
||||
3. **resp 超限改发 response_too_large**
|
||||
- 原条款:DEVELOPMENT 7.5「resp 超限改发 response_too_large」。
|
||||
- 实际做法:发布前按连接表 `MaxReceiveBytes` 与 `MaxPacketSize` 取较小正上限;超限则改发错误 resp(不再发原 data)。未做 MQTT 包头开销扣减(与 message 推送里的 overhead 预算不完全同一函数)。
|
||||
- 原因:接线层最小可用检查。
|
||||
- 备选方案:复用 `message.effectivePayloadLimit`(未导出)。
|
||||
- 影响:接近包上限的大分页可能比推送路径略严或略松。
|
||||
|
||||
4. **断线清 presence.watch**
|
||||
- 原条款:presence.watch 断线清空。
|
||||
- 实际做法:`OnDisconnect` 额外调 `ClearWatch`;`SetOffline` 路径本身也会清。顶号旧连接未走 `SetOffline(isCurrent)` 时仍能清订阅。
|
||||
- 原因:避免旧连接订阅泄漏。
|
||||
- 备选方案:仅依赖 Session 对 isCurrent 调 SetOffline。
|
||||
- 影响:无。
|
||||
|
||||
5. **仍未接线 / 本波未覆盖**
|
||||
- 管理注册设置 HTTP(A3)仍未挂;集成测继续写 `settings` 表开注册。
|
||||
- 下行通知帧(`msg`/`receipt`/`revoked`/`presence`/`group_event`/`fatal`)不是上行分发对象,由既有服务经 PublishDown 发出。
|
||||
- `self.logout`/`hello` 仍在 Session,不经 appUplink。
|
||||
- 身份 I5 停用/删除级联、管理端群等非本任务范围。
|
||||
- 集成测覆盖:双端单聊、离线 keep 后上线、群发不含发送者、延迟内撤回对方无回调;未穷尽 presence.watch 通知与全部 group.* 变体。
|
||||
|
||||
### T0.2 2026-09-30
|
||||
|
||||
1. **请求指纹规范化格式**
|
||||
|
||||
Reference in New Issue
Block a user