fbmuck-6.05/auto/
fbmuck-6.05/contrib/jresolver/
fbmuck-6.05/contrib/jresolver/org/
fbmuck-6.05/contrib/jresolver/org/fuzzball/
fbmuck-6.05/docs/devel/
fbmuck-6.05/game/
fbmuck-6.05/game/logs/
fbmuck-6.05/game/muf/
fbmuck-6.05/scripts/
fbmuck-6.05/src_docs/
#!/bin/sh
# game/restart.  Generated from restart.in by configure.
#
# Optional arguments are port numbers.
# If none are given, defaults to 4201.
#

prefix=/home/winged/fbmuck
exec_prefix=${prefix}

#
# You'll want to edit this to match the base directory of your muck's files.
# This should be the directory containing the 'data' and 'muf' directories.
#
GAMEDIR="${prefix}/var/fbmuck"


#
# The following are the paths to the db files to load, save to, and archive to.
# DBOLD is the path and filename of the the previous database archive.
# DBIN is the path and filename of the database to read in.
# DBOUT is the path and filename of the database that the muck should save to.
#
# On a successful restart, DBIN is moved to DBOLD, and DBOUT is moved to DBIN,
# then the server is started.  The server will save it's db to DBOUT.
#
DBOLD="$GAMEDIR/data/std-db.old"
DBIN="$GAMEDIR/data/std-db.db"
DBOUT="$GAMEDIR/data/std-db.new"


#
# The ports that the MUCK server should listen to.  This will be overridden if
# this script is called with port number arguments.
#
PORTS=4201


#
# It's doubtful you will want to change this, unless you compile a different
# path and filename into the server.  This is the file that deltadumps are
# saved to.  After a successful restart, these deltas will be appended to the
# end of the DBIN file.
#
DELTAS="$GAMEDIR/data/deltas-file"


#
# This is the name of the netmuck program to run.  You probably don't want to
# change this unless you renamed the server program to something other than
# fbmuck.
#
SERVER="${exec_prefix}/bin/fbmuck"


#
# This is the name of the file to log server restarts to.
#
RESTARTS_LOGFILE="$GAMEDIR/logs/restarts"


#
# This is the name of the file that the netmuck program creates that contains
# the process ID of the server currently running in this game directory.
# You probably don't want to change this unless you change the PID_FILE
# #define in include/config.h
#
PIDFILE="$GAMEDIR/netmuck.pid"


#
# You probably won't need to edit anything after this line.
#
#############################################################################
#############################################################################


if [ -x /usr/ucb/ps ]; then
	PS="/usr/ucb/ps x"
elif ps x >> /dev/null 2>&1 ; then
	PS="ps x"
else
	PS="ps -e"
fi

cd $GAMEDIR
# echo "Restarting at: `date`"

umask 077

# Maximize resource limits
ulimit -n `ulimit -Hn` ;# let us use all descriptors our hardlimit allows.
ulimit -t `ulimit -Ht` ;# let us use all CPU time our hardlimit allows.


if [ -r $PIDFILE -a -s $PIDFILE ]; then
	muckpid=`cat $PIDFILE`
	if [ "x$muckpid" != "x" ]; then
		serverexec=`basename $SERVER`
		muck=`${PS} | grep "${serverexec}" | awk '{print $1}' | egrep "\\<${muckpid}\\>" | wc -l`
		if [ $muck -gt 0 ]; then
			echo "This server is already running.  Restart aborted."
			exit 0
		fi
	fi
fi

datestamp=`date +%m%d%y%H%M`

PANICDB="${DBOUT}.PANIC"
if [ -r $PANICDB ]; then
    end=`tail -1 $PANICDB`
    if [ "x$end" = "x***END OF DUMP***" ]; then
		mv $PANICDB $DBOUT
		rm -f $DELTAS
    else
		echo "Warning: PANIC dump failed on "`date` | mail `whoami`
    fi
fi

if [ -r $DBOUT ]; then
    # mv $DBOLD $DBOLD.$datestamp
    mv -f $DBIN $DBOLD
    mv $DBOUT $DBIN
fi

if [ ! -r $DBIN ]; then
	echo "Hey\!  The "$DBIN" file has to exist and be readable to restart the server\!"
	echo "Restart attempt aborted."
	exit
fi

end=`tail -1 $DBIN`
if [ "x$end" != 'x***END OF DUMP***' ]; then
	echo "WARNING\!  The "$DBIN" file is incomplete and therefore corrupt\!"
	echo "Restart attempt aborted."
	exit
fi


# nice -20 gzip -9 $DBOLD.$datestamp &

if [ -r $DELTAS ]; then
	echo "Restoring from delta."
	end=`tail -1 $DELTAS`
	if [ "x$end" = "x***END OF DUMP***" ]; then
		cat $DELTAS >> $DBIN
	else
		echo "Last delta is incomplete.  Truncating to previous dump."
		grep -n '^***END OF DUMP***' $DELTAS | tail -1 > .ftmp$$
		llinum=`cut -d: -f1 < .ftmp$$`
		llcnt=`wc -l < .ftmp$$`
		if [ $llcnt -gt 0 ]; then
			head -$llinum $DELTAS >> $DBIN
		else
			echo "Hmm.  No previous delta dump."
		fi
		rm .ftmp$$
	fi
	rm -f $DELTAS
fi

dbsiz=`ls -1s $DBIN | awk '{print $1}'`
diskfree=`df -k . | tail -1 | awk '{print $4}'`

diskneeded=`expr $dbsiz \* 3`
spacediff=`expr $diskneeded - $diskfree`

if [ $diskfree -lt $diskneeded ]; then
    echo "WARNING: you have insufficient disk space."
    echo "The server is starting anyways, but you should immediately remove"
    echo "old log files, etc. to free up about ${spacediff}K more disk space."
fi

if [ "x$*" != "x" ]; then
    PORTS=$*
fi

touch $RESTARTS_LOGFILE
echo "`date` - `who am i`" >> $RESTARTS_LOGFILE

# echo "Server started at: `date`"
$SERVER -gamedir $GAMEDIR -dbin $DBIN -dbout $DBOUT $PORTS