Ignore:
Timestamp:
May 23, 2014, 6:39:58 PM (10 years ago)
Author:
alloc
Message:

Instance management

File:
1 edited

Legend:

Unmodified
Added
Removed
  • scripts/usr/local/lib/7dtd/common.sh

    r17 r19  
    2222}
    2323
     24# Check if the given instance name is valid (no blanks, no special chars,
     25# only letters, digits, underscore, hyphen -> [A-Za-z0-9_\-])
     26# Params:
     27#   1: Instance name
     28# Returns:
     29#   0/1 instance not valid/valid
     30isValidInstanceName() {
     31        if [[ "$1" =~ ^[A-Za-z0-9_\-]+$ ]]; then
     32                echo 1
     33        else
     34                echo 0
     35        fi
     36}
     37
    2438# Check if the given instance name is an existing instance
    2539# Params:
     
    2842#   0/1 instance not valid/valid
    2943isValidInstance() {
    30         if [ -z $1 ]; then
    31                 echo 0
    32         else
    33                 if [ ! -d $(getInstancePath $1) ]; then
    34                         echo 0
    35                 else
    36                         if [ ! -f $(getInstancePath $1)/config.xml ]; then
    37                                 echo 0
    38                         else
    39                                 echo 1
    40                         fi
    41                 fi
    42         fi
     44        if [ ! -z "$1" ]; then
     45                if [ $(isValidInstanceName "$1") -eq 1 ]; then
     46                        if [ -d $(getInstancePath "$1") ]; then
     47                                if [ -f $(getInstancePath "$1")/config.xml ]; then
     48                                        echo 1
     49                                        return
     50                                fi
     51                        fi
     52                fi
     53        fi
     54        echo 0
    4355}
    4456
     
    6274#   List of instances
    6375getInstanceList() {
     76        local IF
    6477        for IF in $SDTD_BASE/instances/*; do
    65                 I=`basename $IF`
     78                local I=`basename $IF`
    6679                if [ $(isValidInstance $I) -eq 1 ]; then
    6780                        echo $I
     
    8497}
    8598
    86 # Get a single value from a serverconfig
    87 # Params:
    88 #   1: Instance name
    89 #   2: Property name
    90 # Returns:
    91 #   Property value
    92 getConfigValue() {
    93         CONF=$(getInstancePath $1)/config.xml
    94         $XMLSTARLET sel -t -v "/ServerSettings/property[@name='$2']/@value" $CONF
    95 }
    96 
    97 # Update a single value in a serverconfig
    98 # Params:
    99 #   1: Instance name
    100 #   2: Property name
    101 #   3: New value
    102 setConfigValue() {
    103         CONF=$(getInstancePath $1)/config.xml
    104         $XMLSTARLET ed -L -u "/ServerSettings/property[@name='$2']/@value" -v "$3" $CONF
    105 }
    106 
    10799# Check if a given port range (baseport, baseport+1, baseport+2 each udp)
    108 # is already in use by any instance
     100# is already in use by any other instance
    109101# Params:
    110102#   1: Baseport
     103#   2: Current instance (ignored)
    111104# Returns:
    112105#   0/1 not in use/in use
    113106checkGamePortUsed() {
    114         PORTMIN=$1
    115         PORTMAX=$(( $1 + 2 ))
     107        local PORTMIN=$1
     108        local PORTMAX=$(( $1 + 2 ))
     109        local I
    116110        for I in $(getInstanceList); do
    117                 CURPORTMIN=$(getConfigValue $I "ServerPort")
    118                 CURPORTMAX=$(( $CURPORTMIN + 2 ))
    119                 if [ $PORTMAX -ge $CURPORTMIN -a $PORTMIN -le $CURPORTMAX ]; then
    120                         echo 1
    121                         return
     111                if [ "$2" != "$I" ]; then
     112                        local CURPORTMIN=$(getConfigValue $I "ServerPort")
     113                        local CURPORTMAX=$(( $CURPORTMIN + 2 ))
     114                        if [ $PORTMAX -ge $CURPORTMIN -a $PORTMIN -le $CURPORTMAX ]; then
     115                                echo 1
     116                                return
     117                        fi
    122118                fi
    123119        done
     
    125121}
    126122
    127 # Check if a given telnet port is already in use by any instance
     123# Check if a given TCP port is already in use by any instance (either by control
     124# panel or telnet)
    128125# Params:
    129126#   1: Port
    130127# Returns:
    131128#   0/1 not in use/in use
    132 checkTelnetPortUsed() {
     129checkTCPPortUsed() {
     130        local I
    133131        for I in $(getInstanceList); do
    134                 CURENABLED=$(getConfigValue $I "TelnetEnabled")
    135                 CURPORT=$(getConfigValue $I "TelnetPort")
    136                 if [ "$CURENABLED" = "true" -a $CURPORT -eq $1 ]; then
    137                         echo 1
    138                         return
     132                if [ "$2" != "$I" ]; then
     133                        local CURENABLED=$(getConfigValue $I "TelnetEnabled")
     134                        local CURPORT=$(getConfigValue $I "TelnetPort")
     135                        if [ "$CURENABLED" = "true" -a $CURPORT -eq $1 ]; then
     136                                echo 1
     137                                return
     138                        fi
     139                        CURENABLED=$(getConfigValue $I "ControlPanelEnabled")
     140                        CURPORT=$(getConfigValue $I "ControlPanelPort")
     141                        if [ "$CURENABLED" = "true" -a $CURPORT -eq $1 ]; then
     142                                echo 1
     143                                return
     144                        fi
    139145                fi
    140146        done
     
    149155#   String of telnet output
    150156telnetCommand() {
    151         TEL_ENABLED=$(getConfigValue $1 TelnetEnabled)
    152         TEL_PORT=$(getConfigValue $1 TelnetPort)
    153         TEL_PASS=$(getConfigValue $1 TelnetPassword)   
     157        local TEL_ENABLED=$(getConfigValue $1 TelnetEnabled)
     158        local TEL_PORT=$(getConfigValue $1 TelnetPort)
     159        local TEL_PASS=$(getConfigValue $1 TelnetPassword)     
    154160        if [ "$TEL_ENABLED" = "true" ] && [ -n "$TEL_PASS" ]; then
    155161                echo -e "$TEL_PASS\n$2\nexit" | nc -q 2 127.0.0.1 $TEL_PORT
     
    166172getHooksFor() {
    167173        if [ -d $SDTD_BASE/hooks/$1 ]; then
     174                local H
    168175                for H in $SDTD_BASE/hooks/$1/*.sh; do
    169176                        echo "$H"
     
    191198}
    192199
     200# Check if given value is a (integer) number
     201# Params:
     202#   1: Value
     203# Returns:
     204#   0/1 for NaN / is a number
     205isANumber() {
     206        if [[ $1 =~ ^[0-9]+$ ]] ; then
     207                echo "1"
     208        else
     209                echo "0"
     210        fi
     211}
     212
     213# Check if given value is a boolean (true/false, yes/no, y/n)
     214# Params:
     215#   1: Value
     216# Returns:
     217#   0/1
     218isABool() {
     219        local LOW=$(lowercase "$1")
     220        if [ "$LOW" = "false" -o "$LOW" = "true"\
     221                -o "$LOW" = "yes" -o "$LOW" = "y"\
     222                -o "$LOW" = "no" -o "$LOW" = "n" ]; then
     223                echo 1
     224        else
     225                echo 0
     226        fi
     227}
     228
     229# Convert the given value to a boolean 0/1
     230# Params:
     231#   1: Value
     232# Returns:
     233#   0/1 as false/true
     234getBool() {
     235        if [ $(isABool "$1") -eq 0 ]; then
     236                echo 0
     237        else
     238                local LOW=$(lowercase "$1")
     239                if [ "$LOW" = "true" -o "$LOW" = "yes" -o "$LOW" = "y" ]; then
     240                        echo 1
     241                else
     242                        echo 0
     243                fi
     244        fi
     245}
     246
    193247listCommands() {
     248        local C
    194249        for C in $(declare -F | cut -d\  -f3 | grep "^sdtdCommand"\
    195250                        | grep -v "Help$"\
    196251                        | grep -v "Description$"\
    197252                        | grep -v "Expects$"); do
    198                 CMD=$(lowercase "${C#sdtdCommand}")
     253                local CMD=$(lowercase "${C#sdtdCommand}")
    199254                printf "%s " "$CMD"
    200255        done
     
    203258. /usr/local/lib/7dtd/help.sh
    204259. /usr/local/lib/7dtd/playerlog.sh
     260. /usr/local/lib/7dtd/serverconfig.sh
    205261for M in /usr/local/lib/7dtd/commands/*.sh; do
    206262        . $M
Note: See TracChangeset for help on using the changeset viewer.