#!/bin/sh

sError="ERROR: "
[ ! -z "$SYNOPKG_PKGNAME" ] && sError="<br />${sError}"
TIMEOUT=120
PACKAGE_NAME="vocechat-server"
PACKAGE_BASE="/var/packages/${PACKAGE_NAME}/target"
LOG="${PACKAGE_BASE}/logs/vocechat-server.log"
PACKAGE_ENABLED="/var/packages/${PACKAGE_NAME}/enabled"

CheckIfDaemonAlive() {
    local PID="$1"
    PROCESS_ALIVE="0"
    [ -z "$PID" ] && return 1
    kill -0 "$PID"
    [ "0" == "$?" ] && PROCESS_ALIVE="1"
}

running_vocechat() {
    local PID=`pidof -x ${PACKAGE_NAME}`
    CheckIfDaemonAlive $PID
    [ "0" == "$PROCESS_ALIVE" ] && return 1
    return 0
}

stop() {
    [ "$SYNOPKG_TEMP_LOGFILE" == "" ] && SYNOPKG_TEMP_LOGFILE="/var/log/vocechat-server.stop.log"
    # 检查vocechat-server进程状态
    i=0
    while true; do
        if running_vocechat ; then
            local PID=`pidof -x ${PACKAGE_NAME}`
            [ -z "$PID" ] && return 0
            kill -15 $PID
            sleep 5s

            # 检查vocechat-server进程状态
            if running_vocechat ; then
                kill -9 $PID
                sleep 5s
            fi
        else
            break
        fi
        [ $i -ge $TIMEOUT ] && break
    done

    if running_vocechat ; then
       echo "${sError}无法关闭vocechat-server服务 (pid=$PID)!" | tee -a $SYNOPKG_TEMP_LOGFILE
       return 1
    fi

    return 0
}

start() {
    [ "$SYNOPKG_TEMP_LOGFILE" == "" ] && SYNOPKG_TEMP_LOGFILE="/var/log/vocechat-server.start.log"
	LANG=C cd "$PACKAGE_BASE" && (nohup ./vocechat-server > "$LOG" 2>&1 &)
    i=0
    while true; do
        if ! running_vocechat ; then
#           echo "WAIT: ${i}s of ${TIMEOUT}s"
            sleep 5s
            i=$((i+5))
        else
            break
        fi
        [ $i -ge $TIMEOUT ] && break
    done

    # 检查vocechat-server进程状态
    if ! running_vocechat ; then
        echo -e "${sError}vocechat-server服务没有运行。" | tee -a $SYNOPKG_TEMP_LOGFILE
        stop
        return 1
    fi

    return 0
}

case $1 in
    start)
        # 启动服务器
        start
        exit $?
    ;;
    stop)
        # 关闭服务器
        stop
        exit $?
    ;;
    status)
        # 检查套件开关
        if [ ! -f "${PACKAGE_ENABLED}" ]; then
            echo "${sError}套件没有开启" | tee -a $SYNOPKG_TEMP_LOGFILE
            exit 0
        fi

        # 检查vocechat-server进程状态
        if ! running_vocechat ; then
            echo "${sError}vocechat-server服务已关闭" | tee -a $SYNOPKG_TEMP_LOGFILE
            exit 1
        fi

        exit 0
    ;;
    log)
        echo "$PACKAGE_BASE/logs/server.log"
        exit 0
    ;;
esac
