#! /bin/sh
### BEGIN INIT INFO
# Provides:          stompserver
# Required-Start:    $network $remote_fs
# Required-Stop:     $network $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: a stomp messaging server implemented in Ruby
# Description:       this script starts or stops the stomp messaging server
#   in daemon mode.
### END INIT INFO
#
# Copyright (c) 2009 Joshua Timberman, <joshua@opscode.com>
#
# stompserver         Startup script for stompserver
# chkconfig: - 80 20
# description: starts up stompserver in daemon mode.

DAEMON=/usr/bin/stompserver
NAME=stompserver
DEFAULT=/etc/default/$NAME
DESC=stompserver
PIDFILE=/var/run/$NAME/pid
STARTTIME=2
DIETIME=2

test -x $DAEMON || exit 0

. /lib/lsb/init-functions

if [ ! -d /var/run/stompserver ]; then
  mkdir -p /var/run/stompserver
fi

# Read configuration variable file if it is present
[ -r $DEFAULT ] && . $DEFAULT

chown stompserver:stompserver /var/run/stompserver

DAEMON_OPTS="-C /etc/stompserver/stompserver.conf"

running() {                                                                     
  [ ! -f "$PIDFILE" ] && return 1
  status="0"
  pidofproc -p $PIDFILE $NAME >/dev/null || status="$?"
  if [ "$status" = 0 ]; then
    return 0
  else
   return 1
  fi
}   

start_server() {                                                                
  start_daemon -p $PIDFILE $DAEMON $DAEMON_OPTS                       
  errcode=$?
  return $errcode                                                         
}       

stop_server() {                                                                 
   if [ -z "$DAEMONUSER" ] ; then                                          
     killproc -p $PIDFILE $DAEMON                                        
     errcode=$?
   else
     start-stop-daemon --stop --quiet --pidfile $PIDFILE \               
       --user $DAEMONUSER \ 
       --exec $DAEMON
     errcode=$?  
   fi  
   return $errcode                                                         
}       

reload_server() {                                                               
  [ ! -f "$PIDFILE" ] && return 1                                             
  pid=pidofproc $PIDFILE # This is the daemon's pid                           
  kill -1 $pid
  return $?
}   

force_stop() {
  [ ! -e "$PIDFILE" ] && return
  if running ; then
    kill -15 $pid
    sleep "$DIETIME"s
    if running ; then
      kill -9 $pid
      sleep "$DIETIME"s
      if running ; then
        echo "Cannot kill $NAME (pid=$pid)!"
        exit 1
      fi
    fi
  fi
  rm -f $PIDFILE
}

case "$1" in
  start)
    log_daemon_msg "Starting $DESC " "$NAME"
    if running ;  then
        log_progress_msg "apparently already running"
        log_end_msg 0
        exit 0
    fi
    if start_server ; then
        [ -n "$STARTTIME" ] && sleep $STARTTIME # Wait some time 
        if  running ;  then
            log_end_msg 0
        else
            log_end_msg 1
        fi
    else
        log_end_msg 1
    fi
    ;;
  stop)
    log_daemon_msg "Stopping $DESC" "$NAME"
    if running ; then
      errcode=0
      stop_server || errcode=$?
      log_end_msg $errcode
    else
      log_progress_msg "apparently not running"
      log_end_msg 0
      exit 0
    fi
    ;;
  force-stop)
    $0 stop
    if running; then
      log_daemon_msg "Stopping (force) $DESC" "$NAME"
      errcode=0
      force_stop || errcode=$?
      log_end_msg $errcode
    fi
    ;;
  restart|force-reload)
    log_daemon_msg "Restarting $DESC" "$NAME"
    errcode=0
    stop_server || errcode=$?
    [ -n "$DIETIME" ] && sleep $DIETIME
    start_server || errcode=$?
    [ -n "$STARTTIME" ] && sleep $STARTTIME
    running || errcode=$?
    log_end_msg $errcode
    ;;
  status)
    status_of_proc -p $PIDFILE $DAEMON "stompserver" && exit 0 || exit $?
    ;;
  reload)
    log_warning_msg "Reloading $NAME daemon: not implemented, as the daemon"
    log_warning_msg "cannot re-read the config file (use restart)."
    ;;
  *)
    N=/etc/init.d/$NAME
    echo "Usage: $N {start|stop|force-stop|restart|force-reload|status}" >&2
    exit 1
    ;;
esac

exit 0

