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

110 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 模块:
```text
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` 已有计数器:
```kotlin
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。