# 联网协议 ## 传输 - 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 秒。 - 连续两个回合超时判负。 - 客户端重连后以权威快照和状态哈希恢复,不在客户端补算遗漏骰点。