_kill_servers() {
  PROCS=`ps -e | grep -E 'chia|vdf_client' -v "chia-start-sim" | awk '!/grep/' | awk '{print $1}'`
  if [ -n "$PROCS" ]; then
    echo "$PROCS" | xargs -L1 kill -KILL
  fi
}

_kill_servers

BG_PIDS=""
_run_bg_cmd() {
  "$@" &
  BG_PIDS="$BG_PIDS $!"
}


_term() {
  echo "Caught TERM or INT signal, killing all servers."
  for PID in $BG_PIDS; do
    kill -TERM "$PID"
  done
  _kill_servers
}

echo "Starting local blockchain simulation. Runs a local introducer and chia system."
echo "Note that this simulation will not work if connected to external nodes."

# Starts a harvester, farmer, timelord, introducer, and 3 full nodes, locally.
# Please note that the simulation is meant to be run locally and not connected to external nodes.
# NOTE: you must run install.sh when changing this file

 _run_bg_cmd chia_farmer --logging.log_stdout=True --logging.log_level=INFO
 _run_bg_cmd chia_harvester --logging.log_stdout=True --logging.log_level=INFO
 _run_bg_cmd chia_timelord --logging.log_stdout=True --logging.log_level=INFO
 _run_bg_cmd chia_timelord_launcher --logging.log_stdout=True --logging.log_level=INFO
_run_bg_cmd chia_introducer --logging.log_stdout=True --logging.log_level=INFO
_run_bg_cmd chia_full_node --port=8444 --database_path="simulation_1.db" --rpc_port=8555 --introducer_peer.host="127.0.0.1" --introducer_peer.port=8445 --logging.log_stdout=True --logging.log_level=INFO --logging.log_level=INFO
sleep 1
_run_bg_cmd chia_full_node --port=8002 --database_path="simulation_2.db" --rpc_port=8556 --introducer_peer.host="127.0.0.1" --introducer_peer.port=8445 --logging.log_stdout=True --logging.log_level=INFO
 _run_bg_cmd python -m chia.daemon.server --logging.log_stdout=True --logging.log_level=INFO

wait
