Files
2026-08-17 18:18:13 +08:00

39 lines
1.6 KiB
Markdown

# 联网协议
## 传输
- TCP:默认端口 `18140`
- KCP:默认端口 `18141`
- UDP 房间发现:默认端口 `18142`
- 直接 IP 在端口可达时可用于局域网或公网;不提供匹配、NAT 穿透或账号系统。
Unity 内置 Host 与 .NET 独服使用同一个 `ReplacedRoomAuthority``ReplacedMatchEngine`。消息体是 UTF-8 JSON,底层 TCP/KCP 传输负责完整包边界。
## 消息
| Kind | 用途 |
| --- | --- |
| `Create` | 创建房间并占用席位 |
| `Join` | 加入房间;房间为空时独服可按配置创建 |
| `Ready` | 设置准备状态 |
| `Deck` | 提交并校验 12+4 牌组 |
| `MatchCommand` | 提交回合指令 |
| `MatchSnapshot` | 玩家裁剪快照、房间状态和状态哈希 |
| `MatchEvent` | 成功、重复包等权威结果 |
| `Reconnect` | 在 30 秒席位保留期内重新绑定 |
| `Error` | 结构化错误码和差异详情 |
所有对局指令包含玩家序号和幂等令牌。已接受令牌的重发返回 `Duplicate=true`,不会重复结算。快照只保留对手隐藏区的数量,不暴露卡牌 ID。
## Mod 握手
加入请求携带所有启用 Mod 的 ID、版本及文件 SHA-256。权威端逐文件比较,报告 `missing-mod``unexpected-mod``version``missing-file``unexpected-file``hash` 差异,并拒绝准备。
房间创建时冻结内容快照。热重载只更新之后创建的房间或下一场单机对局,不修改进行中的状态机。
## 断线和超时
- 断线后席位保留 30 秒。
- 连续两个回合超时判负。
- 客户端重连后以权威快照和状态哈希恢复,不在客户端补算遗漏骰点。