#! /bin/sh

# Based on the Debian initscript for mosquitto

### BEGIN INIT INFO
# Provides:         mosquitto
# Required-Start:   $remote_fs $syslog
# Required-Stop:    $remote_fs $syslog
# Default-Start:    2 3 4 5
# Default-Stop:     0 1 6
# Short-Description:    mosquitto MQTT message broker
# Description: 
#  This is a message broker that supports version 3.1/3.1.1 of the MQ Telemetry
#  Transport (MQTT) protocol.
#  
#  MQTT provides a method of carrying out messaging using a publish/subscribe
#  model. It is lightweight, both in terms of bandwidth usage and ease of
#  implementation. This makes it particularly useful at the edge of the network
#  where a sensor or other simple device may be implemented using an arduino for
#  example.
### END INIT INFO

set -e

PIDFILE=@LOCALSTATEDIR@/run/mosquitto.pid
DAEMON=@SBINDIR@/mosquitto

# start and stop the mosquitto MQTT message broker

test -x ${DAEMON} || exit 0

umask 022

. @SYSCONFDIR@/init.d/functions

export PATH="${PATH:+$PATH:}@SBINDIR@:@BASE_SBINDIR@"

case "$1" in
    start)
        echo "Starting Mosquitto message broker" "mosquitto"
        if start-stop-daemon --start --quiet --oknodo --background --make-pidfile --pidfile ${PIDFILE} --exec ${DAEMON} -- -c @SYSCONFDIR@/mosquitto/mosquitto.conf ; then
            exit 0
        else
            exit 1
        fi
        ;;
    stop)
        echo "Stopping Mosquitto message broker" "mosquitto"
        if start-stop-daemon --stop --quiet --oknodo --pidfile ${PIDFILE}; then
            rm -f ${PIDFILE}
            exit 0
        else
            exit 1
        fi
        ;;


    reload|force-reload)
        if [ -f ${PIDFILE} ] ; then
            echo "Reloading configuration for mosquitto"
            pid=`cat ${PIDFILE}`
            kill -HUP $pid
        else
            echo "mosquitto does not seem to be running"
        fi
        ;;

    restart)
        echo "Restarting Mosquitto message broker" "mosquitto"
        if start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile ${PIDFILE}; then
            rm -f ${PIDFILE}
        fi
        if start-stop-daemon --start --quiet --oknodo --background --make-pidfile --pidfile ${PIDFILE} --exec ${DAEMON} -- -c @SYSCONFDIR@/mosquitto/mosquitto.conf ; then
            exit 0
        else
            exit 1
        fi
        ;;

    status)
        status ${DAEMON} && exit 0 || exit $?
        ;;

    *)
        echo "Usage: $0 {start|stop|reload|force-reload|restart|status}"
        exit 1
esac

exit 0
