mirror of
https://github.com/vicliu624/trail-mate.git
synced 2026-07-12 06:39:00 +00:00
e466060fbd
* draft * Adjust IME candidate scrolling and space behavior * Remove IME buffer label and update remaining counter * Align Meshtastic handling and stabilize chat UI - Align Meshtastic send/receive flow: add routing ACK decoding/log mapping, ack timeouts, channel tracking, and richer RX/TX diagnostics. - Persist and manage PKI peer keys; add PKI backoff on NO_CHANNEL/UNKNOWN_PUBKEY and fall back to PSK when needed. - Improve chat UI state handling: safer app switching with exit callbacks, active app clearing on menu return, and safer chat container cleanup. - Fix Contacts → Compose parent selection to avoid UI tree mismatch; add broadcast compose support and refine action button behavior. - Add UI debug logging for screen/parent validity and child counts to diagnose black-screen/stacking issues. - Apply timezone offset helpers for display-time formatting and reuse in screenshot timestamps. * Add changelog entry and time helpers
3.2 KiB
3.2 KiB
Team 实现清单(按你的架构分层)
目标:参考现有 chat 的分层方式,在 Team 功能上采用同样的分层结构,并显式对齐「解释即架构」的开发思想。以下清单按层拆解,便于逐项落地与验收。
1) Domain(纯模型层)
- team/domain/team_types.h
- 基础类型:TeamId, TeamKey, TeamRole, TeamState, TeamMember, TeamParams
- 事件类型枚举:TeamEventType
- 事件载体:TeamEvent(包含 event_id/team_id/ts/sender_id/key_id/payload)
- team/domain/team_model.h/.cpp
- 状态机:Idle/Create/Active/Rotate/Disband
- 成员可见性/last_seen/health
- 位置降采样策略
- 复盘事件生成(纯内存结构,不涉及存储)
2) Ports(接口层)
- team/ports/i_team_store.h
- 读写 PersistentTeamState(单一对象)
- load/save/erase
- team/ports/i_team_log_store.h
- 追加写 TeamEvent(LogRecord)
- appendEvent/appendSnapshot(snapshot 可选)
- team/ports/i_team_mesh_adapter.h
- sendAppData(portnum, payload, len, dest, want_ack)
- pollIncomingData 返回 MeshIncomingData
- team/ports/i_team_crypto.h
- kdf, aeadEncrypt, aeadDecrypt
3) Usecase(用例层)
- team/usecase/team_service.h/.cpp
- createTeam/joinTeam/acceptJoin/confirmJoin
- rotateKey/disband/leave
- processIncoming:消费 TEAM_*_APP 数据包
- 严格遵守持久化时机(成功跃迁后写入,解散开始即删除)
- 事件落盘(LogStore)与 EventBus 通知
4) Infra(基础设施层)
- 存储
- team/infra/store/team_flash_store.*:NVS/Preferences 单 blob(含 magic/version/length/crc)
- team/infra/store/team_log_store.*:SD append-only LogRecord(AEAD + CRC)
- Meshtastic 适配
- team/infra/meshtastic/team_mt_adapter.* 或复用 MtAdapter 新增 pollIncomingData/sendAppData
- 解析 meshtastic_Data 的 portnum,将非 TEXT 的 payload 入队
- 定义 TEAM_*_APP 自定义 portnum(基于 PortNum_PRIVATE_APP + n)
- 密码学
- team/infra/crypto/team_crypto_*:KDF + AEAD(与 TeamEncrypted 结构匹配)
5) AppContext 与任务流
- app/app_context.*
- 新增 TeamModel, TeamService, TeamStore, TeamLogStore
- AppContext::update 调用 team_service_->processIncoming
- sys/event_bus.h
- 新增 Team 相关事件类型(状态变化、成员变化、指令、诊断)
6) 协议与编码
- TeamEncrypted 统一 Envelope(version/team_id/key_id/nonce/ciphertext/aad_flags)
- TEAM_MGMT_APP
- TEAM_ADVERTISE, JOIN_REQUEST, JOIN_ACCEPT, JOIN_CONFIRM, TEAM_STATUS
- TEAM_POSITION_APP / TEAM_WAYPOINT_APP
- 明文 payload 为 meshtastic Position/Waypoint(再用 TeamEncrypted AEAD)
7) 持久化与日志
- PersistentTeamState 单对象
- identity + secrets + channel + params + log_*
- 启动恢复
- magic/crc 失败 -> erase -> Idle
- LogRecord
- AEAD(LogKey) + trailer_crc32
- 关键事件即时 flush
8) MVP 优先级(建议)
- TeamService + TeamModel(状态机)
- Meshtastic adapter 支持 pollIncomingData/sendAppData
- TEAM_ADVERTISE / JOIN_REQUEST / JOIN_ACCEPT / TEAM_POSITION_APP
- NVS 持久化单对象
- SD LogRecord 追加写(无 snapshot)
- JOIN_CONFIRM / TEAM_STATUS / ROTATE