# 四方洲行动 · 联机服务器（下载分支）

腐竹（房主）在自己电脑上运行本服务器，启动后会**自动生成邀请码**。朋友把邀请码对应的连接地址填进游戏「联机框」即可进同一房间，**聊天 + 同步联机**。也支持**局域网自动发现**（像 mcjs 一样，同 WiFi 自动列房）。

## 一、启动服务器

### 方式 A：Node（推荐，零依赖）
```bash
cd server
node server.js 3210
```
> 需要 Node.js 16+。无需 `npm install`，纯标准库。

### 方式 B：Python（零依赖）
```bash
cd server
python server.py 3210
```
> 需要 Python 3.7+，仅用标准库。

启动后控制台会打印：
```
四方洲联机服务器已启动
本机端口   : 3210
局域网地址 : ws://192.168.1.20:3210
自动邀请码 : ABCD12  →  ws://192.168.1.20:3210/ABCD12
```

## 二、朋友怎么连

1. 腐竹把上面的 `ws://192.168.1.20:3210/ABCD12` 发给朋友
   - 局域网（同 WiFi）：直接用这个地址
   - 异地（不同网络）：腐竹需先把 `3210` 端口映射到公网（路由器端口转发 / 内网穿透如 SakuraFrp、ngrok、Cloudflare Tunnel），再把**公网地址**发给朋友
2. 朋友打开游戏 → 联机框 → 粘贴地址 → 进入房间
3. 房间里所有人实时同步位置与动作，并可聊天

## 三、房间与邀请码

- 服务器是**房间制**：连接地址的路径就是房间号
  - `ws://IP:端口` → 默认大厅 `LOBBY`
  - `ws://IP:端口/ABCD12` → 房间 `ABCD12`
- 想开多个独立房间，给不同的朋友不同的邀请码即可，互不打扰
- 邀请码只是房间号，真正跨网络可达的是「腐竹的公网地址 + 端口」

## 四、局域网自动发现（可选）

服务器每 2 秒通过 UDP 8788 广播一个信标。未来游戏客户端会监听该信标，**同 WiFi 下自动列出可用房间**，免手输地址（mcjs 式体验）。当前版本先在联机框手填地址即可。

## 五、消息协议（给想二次开发的你）

客户端发来的文本帧是 JSON，服务端按房间原样转发（附加 `_from` 字段标记发送者）：

| type | 说明 |
|------|------|
| `state` | 玩家位置/动作等状态，房间内广播同步 |
| `chat`  | 聊天消息，房间内广播 |
| `ping`  | 心跳，服务端自动回 `pong` |

## 六、端口与安全

- 默认端口 `3210`，可在命令行指定
- 服务器仅做中继转发，**不验证内容**，请勿在公网裸奔暴露敏感信息
- 建议异地联机走内网穿透并只把地址发给信任的朋友
