178 lines
4.3 KiB
Bash
Executable File
178 lines
4.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
|
|
|
LOG_DIR=${HM_LOG_DIR:-"$ROOT_DIR/hm_log"}
|
|
GAMESERVER_IP=${HM_GAMESERVER_IP:-"127.0.0.1"}
|
|
GAMESERVER_PORT=${HM_GAMESERVER_PORT:-"3724"}
|
|
|
|
GAMESERVER_BIN="$ROOT_DIR/hm_gameserver/hm_gameserver"
|
|
LOBBYSERVER_BIN="$ROOT_DIR/hm_lobbyserver/hm_lobbyserver"
|
|
|
|
GAMESERVER_PID="$LOG_DIR/hm_gameserver.pid"
|
|
LOBBYSERVER_PID="$LOG_DIR/hm_lobbyserver.pid"
|
|
|
|
usage() {
|
|
cat <<EOF
|
|
Usage: ./dev <command>
|
|
|
|
Commands:
|
|
build Build gameserver and lobbyserver
|
|
start Start gameserver and lobbyserver
|
|
stop Stop running servers
|
|
status Show server status
|
|
logs Tail server logs
|
|
docker-build Build docker images
|
|
docker-start Start dockerized stack
|
|
docker-stop Stop dockerized stack
|
|
docker-status Show docker stack status
|
|
docker-logs Tail dockerized logs
|
|
|
|
Environment:
|
|
HM_LOG_DIR Log directory (default: ./hm_log)
|
|
HM_GAMESERVER_IP Lobby points to this IP (default: 127.0.0.1)
|
|
HM_GAMESERVER_PORT Lobby points to this port (default: 3724)
|
|
HM_SKIP_COUCHBASE_CHECK=1 Skip Couchbase availability check
|
|
EOF
|
|
}
|
|
|
|
docker_compose() {
|
|
if command -v docker >/dev/null 2>&1 && docker compose version >/dev/null 2>&1; then
|
|
docker compose "$@"
|
|
return
|
|
fi
|
|
|
|
if command -v docker-compose >/dev/null 2>&1; then
|
|
docker-compose "$@"
|
|
return
|
|
fi
|
|
|
|
echo "docker compose not found" >&2
|
|
exit 1
|
|
}
|
|
|
|
require_bin() {
|
|
if ! command -v "$1" >/dev/null 2>&1; then
|
|
echo "Missing required binary: $1" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
check_couchbase() {
|
|
if [ "${HM_SKIP_COUCHBASE_CHECK:-}" = "1" ]; then
|
|
return 0
|
|
fi
|
|
|
|
if command -v curl >/dev/null 2>&1; then
|
|
if ! curl -s --max-time 2 http://localhost:8091/pools >/dev/null; then
|
|
echo "Couchbase not reachable on localhost:8091." >&2
|
|
echo "Start Couchbase and restore bucket 'hbs' or set HM_SKIP_COUCHBASE_CHECK=1." >&2
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "curl not found; cannot verify Couchbase availability." >&2
|
|
echo "Install curl or set HM_SKIP_COUCHBASE_CHECK=1." >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
build() {
|
|
require_bin make
|
|
make -C "$ROOT_DIR/hm_gameserver"
|
|
make -C "$ROOT_DIR/hm_lobbyserver"
|
|
}
|
|
|
|
start() {
|
|
check_couchbase
|
|
mkdir -p "$LOG_DIR"
|
|
|
|
if [ ! -x "$GAMESERVER_BIN" ] || [ ! -x "$LOBBYSERVER_BIN" ]; then
|
|
echo "Binaries missing; run ./dev build first." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ -f "$GAMESERVER_PID" ] || [ -f "$LOBBYSERVER_PID" ]; then
|
|
echo "PID files exist; run ./dev stop first." >&2
|
|
exit 1
|
|
fi
|
|
|
|
nohup "$GAMESERVER_BIN" > "$LOG_DIR/hm_gameserver.out" 2>&1 &
|
|
echo $! > "$GAMESERVER_PID"
|
|
|
|
nohup "$LOBBYSERVER_BIN" \
|
|
--gameserver="$GAMESERVER_IP" \
|
|
--gameserver_port="$GAMESERVER_PORT" \
|
|
> "$LOG_DIR/hm_lobbyserver.out" 2>&1 &
|
|
echo $! > "$LOBBYSERVER_PID"
|
|
|
|
echo "Servers started. Logs in $LOG_DIR"
|
|
}
|
|
|
|
stop() {
|
|
if [ -f "$GAMESERVER_PID" ]; then
|
|
kill "$(cat "$GAMESERVER_PID")" 2>/dev/null || true
|
|
rm -f "$GAMESERVER_PID"
|
|
fi
|
|
|
|
if [ -f "$LOBBYSERVER_PID" ]; then
|
|
kill "$(cat "$LOBBYSERVER_PID")" 2>/dev/null || true
|
|
rm -f "$LOBBYSERVER_PID"
|
|
fi
|
|
}
|
|
|
|
status() {
|
|
if [ -f "$GAMESERVER_PID" ] && kill -0 "$(cat "$GAMESERVER_PID")" 2>/dev/null; then
|
|
echo "hm_gameserver running (pid $(cat "$GAMESERVER_PID"))"
|
|
else
|
|
echo "hm_gameserver not running"
|
|
fi
|
|
|
|
if [ -f "$LOBBYSERVER_PID" ] && kill -0 "$(cat "$LOBBYSERVER_PID")" 2>/dev/null; then
|
|
echo "hm_lobbyserver running (pid $(cat "$LOBBYSERVER_PID"))"
|
|
else
|
|
echo "hm_lobbyserver not running"
|
|
fi
|
|
}
|
|
|
|
logs() {
|
|
tail -f "$LOG_DIR/hm_gameserver.out" "$LOG_DIR/hm_lobbyserver.out"
|
|
}
|
|
|
|
case "${1:-}" in
|
|
build)
|
|
build
|
|
;;
|
|
start)
|
|
start
|
|
;;
|
|
stop)
|
|
stop
|
|
;;
|
|
status)
|
|
status
|
|
;;
|
|
logs)
|
|
logs
|
|
;;
|
|
docker-build)
|
|
docker_compose build
|
|
;;
|
|
docker-start)
|
|
docker_compose up -d
|
|
;;
|
|
docker-stop)
|
|
docker_compose down
|
|
;;
|
|
docker-status)
|
|
docker_compose ps
|
|
;;
|
|
docker-logs)
|
|
docker_compose logs -f --tail=200 gameserver lobbyserver
|
|
;;
|
|
*)
|
|
usage
|
|
exit 1
|
|
;;
|
|
esac
|