#!/bin/sh
#
# Copyright(C) 1993-2007 Adobe Systems Incorporated.  All rights reserved.
#
# Adobe Flash Media Server Service Manager
#

# Path to FMS binary, and short-form for messages.
INSTALLDIR=`dirname $0`
PRODUCT="Adobe Flash Media Server"
fms=FMS
RETVAL=0
NLSPATH=./tcSrvMsg:$NLSPATH; export NLSPATH
PATH=${PATH}:/usr/bin
export PATH

SERVICES_DIR="/etc/adobe/fms/services"

# variables
svcName="fms"
DIR=""

##############
# Subroutines
##############

# list all services
list () {
  echo ""
  echo "$PRODUCT services:"
  if [ -d "$SERVICES_DIR" ]; then
    SERVICES=`ls "$SERVICES_DIR" | sed -e "/fmsadmin/d"`
    echo "$SERVICES"

    echo ""
    echo "$PRODUCT running services:"
    for SERVICE in $SERVICES; do
      DIR=`cat "$SERVICES_DIR/$SERVICE"`
      echo "Processes for service \"$SERVICE\" in directory: $DIR"
      if [ -f "$DIR/fmsmaster.pid" ]; then
        pid1=`cat "$DIR/fmsmaster.pid"`
      fi
      if [ -f "$DIR/fmsadmin.pid" ]; then
        pid2=`cat "$DIR/fmsadmin.pid"`
      fi
      if [ "x$pid1" = "x" ]; then 
        echo "** no server process **"
      else 
        ps -p $pid1
      fi
      if [ "x$pid2" = "x" ]; then 
        echo "** no administration server process **"
      else
        ps -p $pid2
      fi
    done
  else
    echo "There are no $PRODUCT services."
  fi
  echo ""
}

# add service
add () {
  echo "Adding \"$svcName\" service."
  echo "$DIR" > "$SERVICES_DIR/$svcName"
}

# remove service
remove () {
  echo "Removing \"$svcName\" service."
  rm -f "$SERVICES_DIR/$svcName"

  # set fmsadmin to another service
  ADMIN=`cat $SERVICES_DIR/fmsadmin`
  if [ "X$svcName" = "X$ADMIN" ]; then
    NUMSERVICES=`ls "$SERVICES_DIR" | sed -e "/fmsadmin/d" | wc -l`
    if [ $NUMSERVICES -eq 0 ]; then
      rm -f "$SERVICES_DIR/fmsadmin"
    else
      svcName=`ls "$SERVICES_DIR" | sed -e "/fmsadmin/d" | sed -e '2,$d'`
      echo "$svcName" > "$SERVICES_DIR/fmsadmin"
    fi
  fi
}

# return name of admin server
getadmin () {
  ADMIN=`cat $SERVICES_DIR/fmsadmin`
  echo "$ADMIN"
}

# admin server options
adminserver () {
  echo "Admin server:$svcName command:$1"
  if [ ! -f "$SERVICES_DIR/$svcName" ]; then
    echo "Admin server service $svcName not found. Exiting."
    return
  else
    SERVER_SERVICE=`cat "$SERVICES_DIR/$svcName"`
    DIR=`cat "$SERVICES_DIR/$SERVER_SERVICE"`
    cd "$DIR"
    ./adminserver $@
  fi
}

# server options
server () {
  echo "Server:$svcName command:$1"
  if [ ! -f "$SERVICES_DIR/$svcName" ]; then
    echo "Server service $svcName not found. Exiting."
    return
  else
    DIR=`cat "$SERVICES_DIR/$svcName"`
    cd "$DIR"
    ./server $@
  fi
}

# set admin server
setadmin () {
  echo "Setting default admin to \"$svcName\"."
  echo "$svcName" > "$SERVICES_DIR/fmsadmin"
}

# clear autostart for given service
clearautostart () {
  echo "Clearing autostart for \"$svcName\"."
  DIR=`cat "$SERVICES_DIR/$svcName"`
  rm -f "$DIR/.autostart"
}

# set autostart for given service
setautostart () {
  echo "Setting autostart for \"$svcName\"."
  DIR=`cat "$SERVICES_DIR/$svcName"`
  touch "$DIR/.autostart"
}

# suggest service name
suggestName() {
  COUNT=0
  if [ -d /etc/adobe/fms/services ]; then
    svcName=fms
    while [ 1 ]; do
      if [ -f "$SERVICES_DIR/$svcName" ]; then
        # look for next name
        COUNT=`expr $COUNT + 1`
        svcName="fms$COUNT"
      else
        echo "$svcName"
        break
      fi
    done
  else
    svcName=fms
    echo "$svcName"
  fi
}


###############
# Main section
###############

cmd=$1

if [ X$cmd != X ]; then
  shift
fi  # else we go to usage anyway

case "$cmd" in
  add) if [ x$1 != x ]; then
         svcName=$1
       fi
       DIR=$2
       add
       ;;
  list) list
        ;;
  suggest[Nn]ame) suggestName
                  ;;
  get[Aa]dmin) getadmin
              ;;
  remove) if [ x$1 != x ]; then
            svcName=$1
          fi
          export svcName
          remove
          ;;
  set[Aa]dmin) if [ x$1 != x ]; then
                 svcName=$1
               fi
               export svcName
               setadmin
               ;;
  clear[Aa]uto[Ss]tart) if [ x$1 != x ]; then
                          svcName=$1
                        fi
                        export svcName
                        clearautostart
                        ;;
  set[Aa]uto[Ss]tart) if [ x$1 != x ]; then
                        svcName=$1
                      fi
		      export svcName
                      setautostart
                      ;;
  admin[Ss]erver) svcName=fmsadmin
                  export svcName
                  adminserver $@
                  ;;
  server) if [ x$1 != x ]; then
            svcName=$1
          fi
          shift
          export svcName
          server $@
          ;;
  *) echo 
     echo "Unknown command $cmd"
     echo "Usage: $0 command"
     echo ""
     echo "Commands:"
     echo "    list"
     echo "    suggestName"
     echo "    getAdmin"
     echo "    setAdmin"
     echo "    add <service name> <install dir>"
     echo "    remove <service name>"
     echo "    setAutoStart|clearAutoStart <service name>"
     echo "    server <service name> <options>"
     echo "    adminserver <options>"
     exit 1
esac

exit $RETVAL
