#!/bin/bash

# Give up the terminal
exec >/dev/null
exec 2>&1

cd /opt/Citrix/VDA/lib64

VdaPid=0
Terminate=0

kill_vda() {
    Terminate=1
}

vda_running() {
    kill -0 $VdaPid
}

trap kill_vda SIGTERM SIGINT

#on rhel6 and centos6, it is needed for dotnet ICU
export LD_LIBRARY_PATH=/usr/local/lib

#we need to read the dotnet runtime path from db
dotnet_path=`/opt/Citrix/VDA/bin/ctxreg read -k "HKLM\Software\Citrix\VirtualDesktopAgent" -v "DotNetRuntimePath"`

$dotnet_path/dotnet /opt/Citrix/VDA/lib64/BrokerAgentLinux.dll &
VdaPid=$!

# wait until we are signaled to terminate or vda terminates itself
while [ $Terminate -eq 0 ]; do
    wait $VdaPid
    if ! vda_running; then
        Terminate=1
    fi
done

# vda terminated without our signal, abnormal
if ! vda_running; then
    exit 1
fi

# signal vda to terminate
kill -TERM $VdaPid

# wait up to 3 secs for vda to terminate itself
retry=0
while vda_running && [ $retry -lt 3 ]; do
    sleep 1
    let retry=$(($retry + 1))
done

# finally, if vda still hangs, kill it
if vda_running; then
    kill -KILL $VdaPid
fi

exit 0
