#!/bin/sh

### BEGIN INIT INFO
# Provides: rslx_start
# Required-Start: $local_fs $syslog $network
# Should-Start:
# Required-Stop:
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Description: Start the RS System service
### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Program startscript"

UPS_DIR=/usr/legrand/upscomm/bin
# LIBS_DIR=$UPS_DIR/libs


RSSYSTEM_NAME=rslx
RSSYSTEM=$UPS_DIR/$RSSYSTEM_NAME

SCRIPTNAME=/etc/init.d/$RSSYSTEM_NAME
stop_rssystem_tries=20


# Check user
if [ $(id -u) -ne 0 ]; then
    echo "You must be root to execute this program."
    exit 0
fi

# Exit if the daemon is not installed
[ -x "$RSSYSTEM" ] || exit 0

# export LD_LIBRARY_PATH="$UPS_DIR:$LIBS_DIR:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH="$UPS_DIR:$LD_LIBRARY_PATH"


#
# Print process (stop/start)result
#
# Param  
#   $1 result
#   $2 if daemon name
#   $3 "info:started/stopped"
#
print_result()
{
    case "$1" in
        0) printf "%s\n" "$2 has been $3." ;;
        1) printf "%s\n" "$2 was already $3." ;;
        2) printf "%s\n" "$2 could not be $3." ;;
    esac	
}


#
# get pid
#
# Param  
#   $1 process directory and name
# Return
#   pid
#
get_pid()
{     
    pid=$(ps -ef | grep "\<$1\>" | grep -v grep | awk '{print $2}') 	
    echo $pid
}


#
# Start daemon
#
# Param  
#   $1 daemon name
#   $2 daemon directory and name
#   $3 daemon args
#
# Return
#   0 if daemon has been started
#   1 if daemon was already running
#   2 if daemon could not be started
#
do_start_daemon()
{
    pid=$(get_pid $1)
    if [ -n "$pid" ]; then
        return 1 
    fi

    if [ -n "$3" ]; then
        $2 $3
    else
        $2 >/dev/null 2>&1
    fi

    sleep 10

    pid=$(get_pid $1)
    if [ -z "$pid" ]; then
        return 2
    fi
    
    return 0
}


#
# Stop daemon
#
# Param  
#   $1 daemon name
#   $2 daemon directory and name
#   $3 daemon args
#
# Return
#   0 if daemon has been stopped
#   1 if daemon was already stopped
#   2 if daemon could not be stopped
#
do_stop_daemon()
{	
#    cd ${UPS_DIR}	
    
    pid=$(get_pid $1)
    if [ -z "$pid" ]; then
        return 1 
    fi

    if [ -n "$3" ]; then 
        $2 $3
    else
        kill -3 $pid
    fi

    while [ $stop_rssystem_tries -gt 0 ]
        do
            pid=$(get_pid $1)
            if [ -z "$pid" ]; then
                break
            fi
            stop_rssystem_tries=$((stop_rssystem_tries -1))
            sleep 1
        done

    pid=$(get_pid $1)

    if [ -n "$pid" ]; then
        return 2
    fi

    return 0
}


#
# Stop the RS System service
#
# Return
#   0 if rslx has been stopped
#   1 if rslx was already stopped
#   2 if rslx could not be stopped
#
do_stop_rssystem()
{
    cd ${UPS_DIR}

    printf "%s\n" "Stopping $RSSYSTEM_NAME service..."

    #Stop rslx
    do_stop_daemon $RSSYSTEM_NAME $RSSYSTEM "-s"
    RSSYSTEM_RETVAL="$?"
    print_result $RSSYSTEM_RETVAL $RSSYSTEM_NAME "stopped"

    return $RSSYSTEM_RETVAL
}


#
# Start the RS System service
#
# Return
#   0 if rslx has been started
#   1 if rslx was already running
#   2 if rslx could not be started
#
do_start_rssystem()
{
    cd ${UPS_DIR}

    printf "%s\n" "Starting $RSSYSTEM_NAME service..."

    #Start rslx
    do_start_daemon $RSSYSTEM_NAME $RSSYSTEM
    RSSYSTEM_RETVAL="$?"
    print_result $RSSYSTEM_RETVAL $RSSYSTEM_NAME "started"
    [ "$RSSYSTEM_RETVAL" = 2 ] && return $RSSYSTEM_RETVAL

    return $RSSYSTEM_RETVAL
}



case "$1" in
    start)
        do_start_rssystem
    ;;
    
    stop)
        do_stop_rssystem
    ;;
    
    restart)
        do_stop_rssystem
        do_start_rssystem
    ;;

    *)
        printf "Usage: $0 {start|stop|restart}\n"
        exit 1 
    ;;
esac

