#!/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