Initial commit: FunConnect project with server, relay, client and admin panel

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-02-24 20:56:36 +08:00
parent eb6e901440
commit b6891483ae
167 changed files with 16147 additions and 106 deletions

124
scripts/test-lan.sh Normal file
View File

@@ -0,0 +1,124 @@
#!/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