#!/bin/sh
#
# start Synchronet with a detached virtual console
#
######################################################

MYNAME=Synchronet
MYUSERID=bbs
MYDIR=/home/bbs

MYLOCKFILE="$MYDIR/$MYNAME.lock"
MYSCREEN="$MYDIR/$MYNAME.screen"

# no user servicable parts beyond this point

EFENCE="LD_PRELOAD=/usr/lib/libefence.so.0.0"
AUTHBIND="authbind"
MYEXECMD="$AUTHBIND /usr/local/sbbs/exec/sbbs"

case "$1" in
   start)
      echo -n "Starting BBS server: "

      if [ -f $MYLOCKFILE ]; then
        if [ $(ps ax |grep /usr/local/sbbs/exec/sbbs|grep -v grep|grep -c /usr/local/sbbs/exec/sbbs) = 0 ]; then
           echo -n "stale lockfile found, removing -- "
           rm -f $MYLOCKFILE
        fi
      fi

      if [ -f $MYLOCKFILE ]; then
            echo "already running according to $MYLOCKFILE. Not started."
      else
         cd $MYDIR
         screen -m -D su -c "$MYEXECMD" bbs &
                  # fork process and give it a "screen"
         echo $! > $MYSCREEN
         sleep 2
         echo `pidof sbbs` > $MYLOCKFILE
         echo "$MYNAME"
         echo "[ ""$MYEXECMD"" ]"
      fi
      ;;
   stop)
      echo -n "Stopping BBS server: "
      if [ ! -f $MYLOCKFILE ]; then
         echo "none found running"
         exit 2
      fi
      kill -TERM `cat $MYLOCKFILE` 2>/dev/null  # fixme -- can we do this more gracefully please?
      sleep 5
      kill -KILL `cat $MYLOCKFILE` 2>/dev/null
      sleep 1
      rm -f $MYLOCKFILE
      echo "$MYNAME"
      ;;
   restart)
      if [ -f $MYLOCKFILE ]; then
         $0 stop
      fi
      $0 start
      ;;
   reload)

   screen)
      # run this script with parameter of "screen" to get the virtual console
      # back that sbbs is running on.  To detach from the "screen" and
      # leave sbbs running, hit Ctrl-A and then D.

      if [ -f $MYLOCKFILE ]; then
         screen -r `cat $MYSCREEN`
      else echo "No $MYNAME apparently running."
      fi
      ;;
   *)
      echo "Usage: $0 {start|stop|restart|screen}"
      exit 1
esac

exit 0

