Files
TankIC/3DTank/docs/NetCoverage.md
T

3.8 KiB
Raw Blame History

Net Coverage

目的:证明 KT 工程已经实现官方数据包解析,并明确“还缺什么”。 结论:解析层基本完成;缺的是官方链路前半段(config/balancer/auth/WS)和真实会话覆盖率审计。

1. 已实现

1.1 生成物(TankiOffline/net/src/jsMain/kotlin/Net/Generated/)

文件 内容 数量
Registry.kt → DownlinkRegistry.ByMethodId methodId → downlink codec 681
Registry.kt → UplinkRegistry.ByMethodId methodId → uplink codec 361
Registry.kt → ModelRegistry.ByModelId modelId → model codec 363
Metadata.kt 模型名 / method 名 / 字段元数据 —

生成的 codec 模块:

Downlink: 10283 1510 25377 29554 31908 37504 47243 54199 85183 85196 85667 88693 89803
Models:   01510 10283 16100 24635 25377 31908 37504 45686 47243 54199 61860 67222
          71105 85183 85196 85667 85745 87072 88693 89803 99527
Uplink:   10283 25377 37504 47243 54199 85183 85196 85667 89803

覆盖原版 14 个 codec 模块:85183 / 47243 / 85196 / 31908 / 16100 / 10283 / 25377 / 54199 / 37504 / 88693 / 89803 / 85667 / 67222 / 99527。

1.2 协议层(Net/Protocol/)

文件 作用
Entry.kt Hash Request / Hash Response / EnterSpace / OpenSpace / BuildObjectDataRequest
SpaceFrame.kt 帧体 → 记录;处理 nullmap / alias
StreamDecoder.kt 明文 / 探测 / 解密三阶段;XOR key
Containers.kt Lt / Pt / Zt / Alias 容器
TankStateCodec.kt 坦克状态
Wire/ModelCodec.kt 模型编解码接口

1.3 会话层(App/Session/)

文件 作用
SpaceSession.kt WebSocket 字节 → DecodedRecord
SessionRouter.kt DecodedRecord → DownlinkActions / DownlinkModelActions → Redux
UplinkEncoder.kt 动作 → 上行帧
SessionCheck.kt 会话自检
StateCheck.kt Redux 状态自检
AutoTest.kt 真实中继一次性测试

1.4 状态层(App/State/)

  • 89/89 reducer 切片(见 KtRebuild_Plan.md)。
  • RootState.kt / RootWiring.kt。
  • DownlinkActions.kt / DownlinkModelActions.kt。
  • ActionCatalog.kt / ActionSamples.kt。

2. 还没实现

2.1 链路前半段

层 状态 依据
config.xml / status.js 未实现 module_13431
balancer 未实现 module_13431 / module_61860
auth(账号密码 → token/cookie) 未实现 module_82347 Entrance / module_61860
官方 WebSocket 建连 未实现 module_61860:992 Ie
直连官方节点 未实现 当前 LobbyClient 走 9091 中继

2.2 覆盖率审计

SessionRouter 已有计数器:

var Unmapped: Int
var Failed: Int
val UnmappedIds: MutableMap<Long, Int>
val UnmappedModels: MutableMap<String, Int>
val FailedIds: MutableMap<Long, Int>
val FailedReasons: MutableMap<String, Int>

目标:

  • Unmapped = 0
  • Failed = 0
  • UnmappedModels 为空

需要跑一次真实官方会话,收集并补齐。

2.3 golden 帧

现有 codec 是否 byte-for-byte 对得上,需要:

  1. 用 wss_server.js / CDP 抓官方帧。
  2. 对每个 methodId 做 encode/decode 对比。
  3. 差异写入本文件。

3. 结论

  • 数据包解析:已实现(681 downlink / 361 uplink / 363 model / 14 codec 模块 / Entry / SpaceFrame / StreamDecoder / Containers / SessionRouter / 89 reducer)。
  • 官方链路:未实现(config / balancer / auth / 官方 WS)。
  • 覆盖率:未审计(Unmapped / Failed 未归零验证)。
  • golden 帧:未校验。

下一步不是重写 codec,而是:

  1. 补 config / balancer / auth / 官方 WS。
  2. 跑真实会话,驱动 Unmapped / Failed 归零。
  3. golden 帧 byte diff。