xwords/xwords4/linux/scripts/discon_ok.sh
ehouse b84c1a10d9 Use different rooms for each game. The relay, or maybe it's the linux
client's TERM handler, can't handle so many connectings on same room.
2009-11-09 05:25:20 +00:00

117 lines
2.6 KiB
Bash
Executable file

#!/bin/bash
HOST_COUNTER=0
NGAMES=5 # games, not hosts
SAME_ROOM="" # unset means use different
DICT=./dict.xwd
HOST=localhost
PORT=10999
XWORDS=./obj_linux_memdbg/xwords
WAIT=3
CURSES_ARGS="-u -0"
RUN_NAME=$(basename $0)/_$$
. ./scripts/script_common.sh
exec_cmd() {
CMD="$1"
LOG="$2"
[ -z "$LOG" ] && LOG=/dev/null
exec $CMD </dev/null >/dev/null 2>>$LOG
echo "got here???"
}
# Given game strings, build commands for them, run them all for a
# while, and then start running them one at a time so they can
# progress IFF the relay allows disconnected communication
run_game_set() {
GAME_STR=$1
INDX=$2
COUNTER=0
ROOM="ROOM_${INDX}"
declare -a CMDS
declare -a PIDS
declare -a LOGS
for JJ in $(seq ${#GAME_STR}); do
GAME=$(game_name $((COUNTER+INDX)))
CMD=$(cmd_for $GAME_STR $(($JJ-1)) $ROOM $GAME)
CMDS[$COUNTER]="$CMD"
LOG=$(log_name $((COUNTER+INDX)))
LOGS[$COUNTER]="$LOG"
exec_cmd "$CMD" $LOG &
PIDS[$COUNTER]=$!
COUNTER=$((COUNTER+1))
done
# Loop until all games in set have connected, then kill them
while :; do
sleep 2
FOUND=0
for LOG in ${LOGS[*]}; do
if [ -f $LOG ]; then
if grep -q "relayPreProcess: connName" $LOG; then
FOUND=$((FOUND+1))
fi
fi
done
[ $FOUND -lt ${#LOGS[*]} ] && continue
echo "all games started!"
kill ${PIDS[*]}
break
done
# Now loop, running and killing each in turn, until the game is
# finished. Eventually I'll need to deal with games that don't
# finish correctly!
while [ -z "$GAME_DONE" ]; do
for JJ in $(seq 0 $((${#GAME_STR}-1))); do
exec_cmd "${CMDS[$JJ]}" "${LOGS[$JJ]}" &
PID=$!
sleep $((WAIT+2))
kill $PID
if check_logs_done ${LOGS[*]}; then
echo "game looks done: ${LOGS[*]}"
GAME_DONE=TRUE
break
fi
done
done
# Finally, launch them so they can sync up and get the cref out of
# the MSGONLY state
for JJ in $(seq ${#GAME_STR}); do
exec_cmd "${CMDS[$JJ]}" "${LOGS[$JJ]}" &
PIDS[$JJ]=$!
done
sleep 2
kill ${PIDS[*]}
}
echo "mkdir -p $(dirname $(log_name))"
mkdir -p $(dirname $(log_name))
INDX=0
for II in $(seq $NGAMES); do
N_THIS_GAME=$(( 2 + $(($RANDOM % 3 ))))
GAME_STR=$(make_game_str $N_THIS_GAME)
echo $GAME_STR
run_game_set $GAME_STR $INDX &
INDX=$((INDX+4))
done
wait