3.8 KiB
3.8 KiB
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 = 0Failed = 0UnmappedModels为空
需要跑一次真实官方会话,收集并补齐。
2.3 golden 帧
现有 codec 是否 byte-for-byte 对得上,需要:
- 用
wss_server.js/ CDP 抓官方帧。 - 对每个 methodId 做 encode/decode 对比。
- 差异写入本文件。
3. 结论
- 数据包解析:已实现(681 downlink / 361 uplink / 363 model / 14 codec 模块 / Entry / SpaceFrame / StreamDecoder / Containers / SessionRouter / 89 reducer)。
- 官方链路:未实现(config / balancer / auth / 官方 WS)。
- 覆盖率:未审计(
Unmapped/Failed未归零验证)。 - golden 帧:未校验。
下一步不是重写 codec,而是:
- 补 config / balancer / auth / 官方 WS。
- 跑真实会话,驱动
Unmapped/Failed归零。 - golden 帧 byte diff。