53 lines
1.4 KiB
Bash
53 lines
1.4 KiB
Bash
#!/bin/bash
|
|
|
|
# Arguments: [number_clients] [server_binding] [server_port] "<server_password>" "<mod_list>" "<hc_parameters_file>"
|
|
|
|
netcommand="$(command -v "ss" >/dev/null 2>&1 && echo "ss" || echo "netstat")"
|
|
|
|
# Check if any headless clients are to be run
|
|
# If none, immediately exit
|
|
[[ $1 -eq 0 ]] && exit 0
|
|
|
|
# Check if server starts successfully within 3 minutes
|
|
# If not, exit
|
|
server_started=false
|
|
for i in $(seq 1 180); do
|
|
if $netcommand -uln | grep -q ":$3 "; then
|
|
server_started=true
|
|
break
|
|
fi
|
|
sleep 1
|
|
done
|
|
if ! $server_started; then
|
|
exit 1
|
|
fi
|
|
|
|
# Start the headless clients
|
|
baseport=$(($3 + 498))
|
|
parfile="${6:-}"
|
|
export LD_LIBRARY_PATH=$(dirname "$0")/linux64:$LD_LIBRARY_PATH
|
|
cd ./arma3/233780
|
|
for i in $(seq 1 "$1"); do
|
|
if [[ "$2" == "0.0.0.0" ]]; then
|
|
connect="127.0.0.1"
|
|
else
|
|
connect="$2"
|
|
fi
|
|
./arma3server_x64 -client -nosound -profiles=A3Master -connect=$connect:$3 -port=$baseport -password="$4" "-mod=$5" "-par=$parfile" >/dev/null 2>&1 &
|
|
clients+=($!)
|
|
done
|
|
|
|
# Monitor server process and terminate headless clients
|
|
# when server terminates or SIGTERM/SIGINT received
|
|
trap 'for client in "${clients[@]}"; do kill "$client" >/dev/null 2>&1; done; wait' SIGTERM SIGINT
|
|
while true; do
|
|
if ! $netcommand -uln | grep -q ":$3 "; then
|
|
for client in "${clients[@]}"; do
|
|
kill "$client" >/dev/null 2>&1
|
|
done
|
|
wait
|
|
exit 0
|
|
fi
|
|
sleep 1
|
|
done
|