#!/bin/bash
#
# armaserver: ArmA 2 Linux Dedicated Server Control Script
#  (c) 2011 BIStudio
#  ArmA 2 binary version must be 1.04 or later
#

#=======================================================================
#========               CONFIGURATION PARAMETERS                ========
#======== MUST BE EDITED MANUALLY TO FIT YOUR SYSTEM PARAMETERS ========
#=======================================================================
ARMA_DIR=.
CONFIG=server.cfg
PORT=2302
PIDFILE=${ARMA_DIR}/${PORT}.pid
RUNFILE=${ARMA_DIR}/${PORT}.run
LOGFILE=${ARMA_DIR}/log.${PORT}.txt
SERVER=${ARMA_DIR}/server
#=======================================================================
ulimit -c 1000000

case "$1" in


    start)
	if [ -f ${RUNFILE} ]; then
	    $0 stop
	fi
	echo "Starting ArmA 2 server..."
	# file to mark we want server running...	
	echo "go" >${RUNFILE}
	# launch the background watchdog process to run the server
	nohup </dev/null >/dev/null $0 watchdog &
	;;
	
    stop)
	echo "Stopping ArmA 2 server..."
	if [ -f ${RUNFILE} ]; then
	# ask watcher process to exit by deleting its runfile...
	    rm -f ${RUNFILE}
	fi
	# and terminate ArmA 2 server process
	if [ -f ${PIDFILE} ]; then
	    kill -TERM $(< ${PIDFILE})
	    if [ -f ${PIDFILE} ]; then
		rm -f ${PIDFILE}
	    fi
	fi
	;;
	
	
    status)
	if [ -f ${RUNFILE} ]; then
	    echo "Server should be running..."
	else
	    echo "Server should not be running..."
	fi
	if [ -f ${PIDFILE} ]; then
	    PID=$(< ${PIDFILE})
	    echo "PID file exists (PID=${PID})..."
	    if [ -f /proc/${PID}/cmdline ]; then
		echo "Server process seems to be running..."
	    fi
	fi
	;;
	
	
    check)
	echo -n "ArmA 2 directory: ${ARMA_DIR} "
	if [ -d ${ARMA_DIR} ]; then
	    echo "OK"
	else
	    echo "MISSING!"
	fi
	
	echo -n "Server executable: ${SERVER} "
	if [ -x ${SERVER} ]; then
	    echo "OK"
	else
	    echo "ERROR!"
	fi
	
	echo "Port number: ${PORT}"
	
	echo -n "Config file: ${CONFIG} "
	if [ -f ${CONFIG} ]; then
	    echo "OK"
	else
	    echo "MISSING!"
	fi
	
	echo "PID file: ${PIDFILE}"
	echo "RUN file: ${RUNFILE}"
	
	;;

    restart)
	$0 stop
	$0 start
        ;;

    watchdog)
	# this is a background watchdog process. Do not start directly
	while [ -f ${RUNFILE} ]; do
	# launch the server...
	    cd ${ARMA_DIR}
	    echo >>${LOGFILE} "WATCHDOG ($$): [$(date)] Starting server (port ${PORT})..."
	    ${SERVER} >>${LOGFILE} 2>&1 -server -config=${CONFIG} -port=${PORT} -pid=${PIDFILE}
	    if [ -f ${RUNFILE} ]; then
		echo >>${LOGFILE} "WATCHDOG ($$): [$(date)] Server died, waiting to restart..."
		sleep 5s
	    else
		echo >>${LOGFILE} "WATCHDOG ($$): [$(date)] Server shutdown intentional, watchdog terminating"
	    fi
	done    
	;;
    *)
	echo "$0 (start|stop|restart|status|check)"
	;;
esac
