125 lines
3.7 KiB
Bash
125 lines
3.7 KiB
Bash
#!/bin/bash
|
|
# FunMC 局域网联机测试脚本 (Linux/macOS)
|
|
|
|
set -e
|
|
|
|
echo "============================================"
|
|
echo " FunMC 局域网联机测试脚本"
|
|
echo "============================================"
|
|
echo ""
|
|
|
|
# 颜色定义
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# 检查命令是否存在
|
|
command_exists() {
|
|
command -v "$1" >/dev/null 2>&1
|
|
}
|
|
|
|
# 1. 检查 Rust 环境
|
|
echo -e "${YELLOW}[1/6] 检查 Rust 环境...${NC}"
|
|
if command_exists cargo; then
|
|
RUST_VERSION=$(cargo --version)
|
|
echo -e " ${GREEN}✓ Rust 已安装: $RUST_VERSION${NC}"
|
|
else
|
|
echo -e " ${RED}✗ Rust 未安装,请运行: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# 2. 检查 Node.js 环境
|
|
echo -e "${YELLOW}[2/6] 检查 Node.js 环境...${NC}"
|
|
if command_exists node; then
|
|
NODE_VERSION=$(node --version)
|
|
echo -e " ${GREEN}✓ Node.js 已安装: $NODE_VERSION${NC}"
|
|
else
|
|
echo -e " ${RED}✗ Node.js 未安装,请访问 https://nodejs.org 安装${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# 3. 检查数据库连接
|
|
echo -e "${YELLOW}[3/6] 检查数据库连接...${NC}"
|
|
if command_exists docker; then
|
|
if docker ps --filter "name=funmc-db" --format "{{.Names}}" | grep -q "funmc-db"; then
|
|
echo -e " ${GREEN}✓ PostgreSQL 容器运行中${NC}"
|
|
else
|
|
echo -e " ${YELLOW}! PostgreSQL 容器未运行,尝试启动...${NC}"
|
|
docker start funmc-db 2>/dev/null || \
|
|
docker run -d --name funmc-db -p 5432:5432 \
|
|
-e POSTGRES_PASSWORD=password \
|
|
-e POSTGRES_DB=funmc \
|
|
postgres:14
|
|
sleep 3
|
|
echo -e " ${GREEN}✓ PostgreSQL 容器已启动${NC}"
|
|
fi
|
|
else
|
|
echo -e " ${YELLOW}! Docker 未安装,请手动配置 PostgreSQL${NC}"
|
|
fi
|
|
|
|
# 4. 检查端口占用
|
|
echo -e "${YELLOW}[4/6] 检查端口占用...${NC}"
|
|
PORTS=(3000 3001 7900 5432)
|
|
for PORT in "${PORTS[@]}"; do
|
|
if lsof -i :$PORT >/dev/null 2>&1 || netstat -tuln 2>/dev/null | grep -q ":$PORT "; then
|
|
echo -e " ${YELLOW}! 端口 $PORT 已被占用${NC}"
|
|
else
|
|
echo -e " ${GREEN}✓ 端口 $PORT 可用${NC}"
|
|
fi
|
|
done
|
|
|
|
# 5. 获取本机 IP
|
|
echo -e "${YELLOW}[5/6] 获取本机 IP...${NC}"
|
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
# macOS
|
|
LOCAL_IP=$(ipconfig getifaddr en0 2>/dev/null || ipconfig getifaddr en1 2>/dev/null || echo "")
|
|
else
|
|
# Linux
|
|
LOCAL_IP=$(hostname -I 2>/dev/null | awk '{print $1}' || ip route get 1 | awk '{print $7}' 2>/dev/null || echo "")
|
|
fi
|
|
|
|
if [ -n "$LOCAL_IP" ]; then
|
|
echo -e " ${GREEN}✓ 本机局域网 IP: $LOCAL_IP${NC}"
|
|
else
|
|
echo -e " ${RED}✗ 无法获取本机 IP${NC}"
|
|
LOCAL_IP="YOUR_IP"
|
|
fi
|
|
|
|
# 6. 显示测试说明
|
|
echo -e "${YELLOW}[6/6] 测试说明...${NC}"
|
|
echo ""
|
|
echo -e "${CYAN}============================================${NC}"
|
|
echo -e "${CYAN} 局域网联机测试步骤${NC}"
|
|
echo -e "${CYAN}============================================${NC}"
|
|
echo ""
|
|
echo "1. 启动服务端:"
|
|
echo " cd server"
|
|
echo " cargo run"
|
|
echo ""
|
|
echo "2. 启动客户端 (新终端):"
|
|
echo " cd client/ui && npm install"
|
|
echo " cd .. && cargo tauri dev"
|
|
echo ""
|
|
echo "3. 配置其他电脑的客户端:"
|
|
echo " 修改 client/src/config.rs:"
|
|
echo " DEFAULT_SERVER_URL = \"http://${LOCAL_IP}:3000\""
|
|
echo ""
|
|
echo "4. 测试流程:"
|
|
echo " - 主机: 启动 MC 服务器 -> FunMC 创建房间 -> 开始托管"
|
|
echo " - 玩家: FunMC 加入房间 -> 连接 -> 复制地址到 MC"
|
|
echo ""
|
|
echo -e "${CYAN}============================================${NC}"
|
|
|
|
# 询问是否启动服务
|
|
echo ""
|
|
read -p "是否立即启动服务端? (y/n) " -n 1 -r
|
|
echo
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
echo ""
|
|
echo -e "${GREEN}启动服务端...${NC}"
|
|
cd server
|
|
cargo run
|
|
fi
|