#!/bin/bash

SCRIPT="`basename "$0"`"
FULLPATH="$0"
echo "$0" | grep -q ^/
if [ $? -ne 0 ]; then FULLPATH="`pwd`/$0"; fi

ROOTPATH=
OIFS="$IFS"
IFS=/
for i in `echo "$FULLPATH"`; do
    if [ "x$i" != "x" ]; then
        ROOTPATH="$ROOTPATH/$i"
        if [ -d "$ROOTPATH/RoonDotnet" ]; then break; fi
    fi
done
IFS="$OIFS"

export DOTNET_ROOT="$ROOTPATH/RoonDotnet"
export PATH=$DOTNET_ROOT:"$PATH"
#export LD_LIBRARY_PATH="$DOTNET_ROOT/lib:$LD_LIBRARY_PATH"
export FONTCONFIG_PATH=$DOTNET_ROOT/etc/fonts
#export MONO_DEBUG=no-gdb-backtrace
#export MONO_GC_PARAMS=major=marksweep-conc,nursery-size=16m
#export MONO_TLS_PROVIDER=btls
#export MONO_ENABLE_BLOCKING_TRANSITION=1

# boost ulimit
ulimit -n 8192

if [ -d "$ROOTPATH/.update" ]; then
    function doerror {
        echo ERROR: $1
        exit 1
    }

    #echo Removing any old backup install...
    rm -rf "$ROOTPATH/.previous"

    #echo Moving old install to "$ROOTPATH/.previous"
    mkdir "$ROOTPATH/.previous" || doerror "failed to mkdir $ROOTPATH/.previous"
    mv "$ROOTPATH/"[A-Za-z0-9_]* "$ROOTPATH/.previous/" || doerror "failed to move old install to $ROOTPATH/.previous/"

    #echo Moving new install to "$ROOTPATH/"
    mv "$ROOTPATH/.update/$SCRIPT/"* "$ROOTPATH/"
    if [ $? != 0 ]; then
        rm -rf "$ROOTPATH/"[A-Za-z0-9_]*
        mv "$ROOTPATH/.previous/"* "$ROOTPATH/"
        rm -rf "$ROOTPATH/.previous/"
        doerror "failed to move update contents to $ROOTPATH/"
    fi

    rm -rf "$ROOTPATH/.update/"
    rm -rf "$ROOTPATH/.previous"

    for i in $(ps -Awwo pid,args | grep RAATServer.exe | grep -v grep | awk '{print $1}'); do kill -9 $i; done

    exec "$0" "$@"
fi

# we don't use stdin, so close it up.
exec 0</dev/null
exec 0>/dev/null

# hard link mono-sgen -> appname in mono bin dir
HARDLINK=$DOTNET_ROOT/$SCRIPT
ln -sf $DOTNET_ROOT/dotnet $HARDLINK

# fire up the app
cd "$ROOTPATH/Server"
exec "$HARDLINK" "$SCRIPT.dll" "$@"
