#!/bin/bash
### BEGIN INIT INFO
# Provides:          rex-dwm-rpc
# Required-Start:    $remote_fs $syslog
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Run rex-dwm-rpc HTTP server
### END INIT INFO

# Source function library.
#. /etc/rc.d/init.d/functions

PROG=rex-dwm-rpc
EXEC=/usr/bin/lua5.2
SCRIPT=/usr/share/rex-dwm/dwm-rpc-server/rpc_server.lua
[ -e /etc/sysconfig/$PROG ] && . /etc/sysconfig/$PROG
SOCKDIR=/run/$PROG
SOCKFILE=$SOCKDIR/$PROG.sock
LOCKFILE=/lock/$PROG
PIDFILE=/run/$PROG.pid
USER=rex-dwm
GROUP=www-data
RETVAL=0

check() {
    [ `id -u` = 0 ] || exit 4
    test -x $EXEC || exit 5
    test -f $SCRIPT || exit 5
}

start() {
    check
    if [ ! -f $LOCKFILE ]; then
        echo -n $"Starting $PROG: "
        
        # Create socket directory
        mkdir -p $SOCKDIR
        chown $USER:$GROUP $SOCKDIR
        chmod 755 $SOCKDIR
        
        # Start server in background
        su -s /bin/sh -c "RPC_SOCKET=$SOCKFILE $EXEC $SCRIPT > /dev/null 2>&1 & echo \$! > $PIDFILE" $USER
        RETVAL=$?
        
        if [ $RETVAL -eq 0 ]; then
            # Wait a moment for socket to be created
            sleep 1
            if [ -S $SOCKFILE ]; then
                chmod 660 $SOCKFILE
                touch $LOCKFILE
                echo "success"
            else
                echo "failure (socket not created)"
                RETVAL=1
            fi
        else
            echo "failure"
        fi
        echo
    fi
    return $RETVAL
}

stop() {
    check
    echo -n $"Stopping $PROG: "
    if [ -f $PIDFILE ]; then
        kill $(cat $PIDFILE) 2>/dev/null
        RETVAL=$?
        if [ $RETVAL -eq 0 ]; then
            rm -f $LOCKFILE
            rm -f $PIDFILE
            rm -f $SOCKFILE
            echo "success"
        else
            echo "failure"
        fi
    else
        echo "not running"
        RETVAL=1
    fi
    echo
    return $RETVAL
}

restart() {
    stop
    start
}   

case "$1" in
start)
    start
    ;;
stop)
    stop
    ;;
restart)
    restart
    ;;
status)
    status $PROG
    RETVAL=$?
    ;;
*)
    echo $"Usage: $0 {start|stop|restart|status}"
    RETVAL=2
esac

exit $RETVAL
