Files
justice/www/html/Game/public/trycss/game-justic2/start.cmd
T
2026-05-26 10:48:16 +00:00

135 lines
4.8 KiB
Batchfile

@echo off
setlocal EnableExtensions
title Game Justic 2 - Node Servers + Gateway
color 0A
echo.
echo ==========================================
echo Game Justic 2 - Start Node.js Servers
echo ==========================================
echo.
rem ---- 1) Check Node.js ----
where node >nul 2>nul
if errorlevel 1 (
color 0C
echo [ERROR] Node.js not found.
echo Please install Node.js from https://nodejs.org/
echo.
pause
exit /b 1
)
for /f "tokens=*" %%v in ('node -v') do echo Node.js %%v detected
rem ---- 2) Resolve project directory ----
set "PROJECT_DIR=%~dp0"
if "%PROJECT_DIR:~-1%"=="\" set "PROJECT_DIR=%PROJECT_DIR:~0,-1%"
rem ---- 3) Verify required files ----
if not exist "%PROJECT_DIR%\Game\server.js" (
color 0C
echo [ERROR] Cannot find "%PROJECT_DIR%\Game\server.js"
pause
exit /b 1
)
if not exist "%PROJECT_DIR%\realtimechat\server.js" (
color 0C
echo [ERROR] Cannot find "%PROJECT_DIR%\realtimechat\server.js"
pause
exit /b 1
)
if not exist "%PROJECT_DIR%\gateway.js" (
color 0C
echo [ERROR] Cannot find "%PROJECT_DIR%\gateway.js"
echo This file is required to serve the project at site root ^(absolute paths^).
pause
exit /b 1
)
if /I "%~1"=="--check" (
echo start.cmd check OK
exit /b 0
)
rem ---- 4) Choose ports (override via env if needed) ----
if not defined GAME_PORT set "GAME_PORT=3004"
if not defined CHAT_PORT set "CHAT_PORT=3003"
if not defined GATEWAY_PORT set "GATEWAY_PORT=8080"
rem ---- 5) Install dependencies if missing ----
if not exist "%PROJECT_DIR%\Game\node_modules\socket.io" (
echo.
echo Installing Game dependencies...
pushd "%PROJECT_DIR%\Game" || goto :fail
call npm install
if errorlevel 1 ( popd & goto :fail )
popd
)
if not exist "%PROJECT_DIR%\realtimechat\node_modules\socket.io" (
echo.
echo Installing RealtimeChat dependencies...
pushd "%PROJECT_DIR%\realtimechat" || goto :fail
call npm install
if errorlevel 1 ( popd & goto :fail )
popd
)
rem ---- 6) Free target ports (kill ONLY node processes) ----
echo.
echo Checking ports %GATEWAY_PORT%, %GAME_PORT%, %CHAT_PORT%...
powershell -NoProfile -ExecutionPolicy Bypass -Command ^
"$ports=@(%GATEWAY_PORT%,%GAME_PORT%,%CHAT_PORT%); Get-NetTCPConnection -State Listen -ErrorAction SilentlyContinue | Where-Object { $ports -contains $_.LocalPort } | ForEach-Object { try { $p=Get-Process -Id $_.OwningProcess -ErrorAction Stop; if ($p.ProcessName -eq 'node') { Write-Host ' Killing node PID' $p.Id 'on port' $_.LocalPort; Stop-Process -Id $p.Id -Force } else { Write-Host ' [WARN] Port' $_.LocalPort 'in use by non-node process:' $p.ProcessName '(PID' $p.Id ')' } } catch {} }"
rem ---- 7) Start Game server ----
echo.
echo Starting Game server (port %GAME_PORT%) ...
start "Game Server %GAME_PORT%" /D "%PROJECT_DIR%\Game" /min cmd /k "set PORT=%GAME_PORT%&&node server.js"
rem ---- 8) Start RealtimeChat server ----
echo Starting Chat server (port %CHAT_PORT%) ...
start "Chat Server %CHAT_PORT%" /D "%PROJECT_DIR%\realtimechat" /min cmd /k "set PORT=%CHAT_PORT%&&node server.js"
rem ---- 9) Wait briefly so backends are ready before gateway ----
timeout /t 2 /nobreak >nul
rem ---- 10) Start Gateway (root site server) ----
echo Starting Gateway (port %GATEWAY_PORT%) ...
start "Gateway %GATEWAY_PORT%" /D "%PROJECT_DIR%" /min cmd /k "set GATEWAY_PORT=%GATEWAY_PORT%&&set GAME_PORT=%GAME_PORT%&&set CHAT_PORT=%CHAT_PORT%&&node gateway.js"
timeout /t 2 /nobreak >nul
echo.
echo ==========================================
echo Open in browser:
echo http://localhost:%GATEWAY_PORT%/
echo http://localhost:%GATEWAY_PORT%/Login/
echo http://localhost:%GATEWAY_PORT%/Main-Lobby/
echo.
echo Backends (direct):
echo Game : http://localhost:%GAME_PORT%/Game/
echo Chat : http://localhost:%CHAT_PORT%/realtimechat/
echo ==========================================
echo.
echo Note:
echo - WAMP/Apache (port 80) ไม่จำเป็นต้องเปิด — gateway เสิร์ฟไฟล์ทั้งหมดให้
echo - ถ้าต้องการ /Admin/ (PHP) ให้เปิด WAMP แยกที่ http://localhost/game-justic2/Admin/
echo - กดปุ่มใด ๆ ในหน้าต่างนี้เพื่อหยุดทุก server
echo.
pause >nul
echo.
echo Stopping servers...
taskkill /FI "WINDOWTITLE eq Game Server %GAME_PORT%*" /F >nul 2>nul
taskkill /FI "WINDOWTITLE eq Chat Server %CHAT_PORT%*" /F >nul 2>nul
taskkill /FI "WINDOWTITLE eq Gateway %GATEWAY_PORT%*" /F >nul 2>nul
echo Done.
timeout /t 1 /nobreak >nul
exit /b 0
:fail
color 0C
echo.
echo [ERROR] Failed while preparing dependencies.
echo Please check the message above.
pause
exit /b 1