110 lines
3.8 KiB
Markdown
110 lines
3.8 KiB
Markdown
# 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。
|