#!/bin/sh

MNAME=`uname -n`
OKCHAT_HOME="/public/chat/server"

LOG_DIR=$OKCHAT_HOME
LOG_FILE_LINK=$LOG_DIR/current.log
JAVA_HOME="/usr/lib/jdk1.2.2/bin"
PID_FILE=$OKCHAT_HOME/okchat.pid
LOCK_FILE=$OKCHAT_HOME/OKCHAT.LCK
ALIVE_FILE=$OKCHAT_HOME/server.alive

RESTART_DELAY=30
CHECK_DELAY=10

case "$1" in
'stop')
        echo "Explicitly stop called";

	rm -f $PID_FILE 2>/dev/null;
	
	for PIDS in `ps -jef | grep okchat | grep /usr/lib/jdk1.2.2 | awk '{ print $2 }' `;
	do
		echo "Killing PID $PIDS"
		kill -9 $PIDS;
	done 

	echo "done"
        ;;

'status')
	ERROR=0;

	echo "checking for running startokchat.sh";
	if (test -z "`ps -jef | grep 'startokchat.sh start CLEAN' `");
	then
		echo "Restarting startokchat.sh in background";
		nohup $OKCHAT_HOME/startokchat.sh start CLEAN &
		exit 1;
	fi

	echo "check for running okchat"
	if (test -z "`ps -jef | grep root | grep java `");
	then
		echo "No JVMs found";
		ERROR=1;
	fi

	echo "check for alive file"
	if (test ! -e $ALIVE_FILE);
	then
		echo "No $ALIVE_FILE found";
		ERROR=1;
	else
		echo "Dont start $0 status the next 20 seconds - thanks";
		rm -rf $ALIVE_FILE;
	fi

	if ($ERROR -eq 0);
	then
		echo "OkChat OK";
		exit 0;
	else
		echo "Error occured - killing all JVMs";
		$0 stop

		exit 1;
	fi

	;;

'start')
	
	# test if exists PID
	if (test -f "$PID_FILE" )
	then
		if [ $2 = "CLEAN" ];
		then
			rm -rf $PID_FILE;
		else
			echo "Found PID file $PID_FILE - check okchat"
			exit 1
		fi
	fi


	while (true);
	do
		echo 
		echo "==============================="
		echo "Restarted at: `date`"
		echo
		
		LOG_FILE="start_log.`date +"%H%M_%d%m"`"

		# delay startup
		while (test -e "$LOCK_FILE");
		do
			#echo "Lockfile $LOCK_FILE exists - suspending for $CHECK_DELAY seconds";
			sleep $CHECK_DELAY;
		done

		# compressing logs
		echo "Removing logfile link $LOG_FILE_LINK...";
		rm $LOG_FILE_LINK 2>&1 >/dev/null ;
		echo "done";

		echo "Starting jvm..."
		$JAVA_HOME/java -classpath .:$OKCHAT_HOME  ChatServer debug 2>&1 >$LOG_FILE &
	
		echo "setting up link $LOG_FILE_LINK --> $LOG_FILE"
		ln -s $LOG_FILE $LOG_FILE_LINK

		echo "Waiting for PID $!";
		echo $! > $PID_FILE ;
		wait $! ;

		rm -rf $PID_FILE

		echo "sleeping $RESTART_DELAY seconds before restart"
		sleep $RESTART_DELAY
	done

	echo "Ooops - shouldn't happen"

	$0 stop
	;;

'restart')
	$0 stop
	;;

'log')
       tail -f $LOG_FILE_LINK
        ;;

'startlog')
       tail -f $OKCHAT_HOME/nohup.out
        ;;

*)
	echo "usage: $0 {stop|start|restart|log|startlog}"
	;;

esac
exit 0