#!/bin/bash

ROOT=$(dirname $0)
echo ROOT=$ROOT

AFB=$ROOT/build/src/afb-daemon
CLI="$ROOT/build/src/afb-client-demo -e -s"
PORT=12345
TOKEN=knock-knock-knock

count=10
null=false
eval set -- $(getopt -o c:n -l count:,null -- "$@") || exit
while true
do
	case "$1" in
	-c|--count)
		if ! test "$2" -gt 0 2>/dev/null; then
			echo "error: $2 is not a valid count" >&2
			exit 1
		fi
		count="$2"
		shift 2
		;;
	-n|--null)
		null=true
		shift
		;;
	--)
		shift
		break
		;;
	esac
done

OUT="$ROOT/stress-out-clients"
echo rm $OUT.*
rm $OUT.* 2> /dev/null

if $null; then
	OUT=/dev/null
else
	OUT="$OUT.%03d"
fi

commands() {
cat << EOC
hello ping true
HELLO PING false
hello pIngNull true
#hello PingBug true
hello PiNgJsOn {"well":"formed","json":[1,2,3,4.5,true,false,null,"oups"]}
hello subcall {"api":"hello","verb":"pingjson","args":[{"key1":"value1"}]}
hello subcall {"api":"hello","verb":"subcall","args":{"api":"hello","verb":"pingjson","args":[{"key1":"value1"}]}}
hello subcallsync {"api":"hello","verb":"pingjson","args":[{"key1":"value1"}]}
hello subcallsync {"api":"hello","verb":"subcall","args":{"api":"hello","verb":"pingjson","args":[{"key1":"value1"}]}}
hello subcall {"api":"hello","verb":"subcallsync","args":{"api":"hello","verb":"pingjson","args":[{"key1":"value1"}]}}
hello subcallsync {"api":"hello","verb":"subcallsync","args":{"api":"hello","verb":"pingjson","args":[{"key1":"value1"}]}}
hello eventadd {"tag":"ev1","name":"event-A"}
hello eventadd {"tag":"ev2","name":"event-B"}
hello eventpush {"tag":"ev1","data":[1,2,"hello"]}
hello eventpush {"tag":"ev2","data":{"item":0}}
hello eventsub {"tag":"ev2"}
hello eventpush {"tag":"ev1","data":[1,2,"hello"]}
hello eventpush {"tag":"ev2","data":{"item":0}}
hello eventsub {"tag":"ev1"}
hello subcall {"api":"hello","verb":"eventpush","args":{"tag":"ev1","data":[1,2,"hello"]}}
hello subcall {"api":"hello","verb":"eventpush","args":{"tag":"ev2","data":{"item":0}}}
hello subcallsync {"api":"hello","verb":"eventpush","args":{"tag":"ev1","data":[1,2,"hello"]}}
hello subcallsync {"api":"hello","verb":"eventpush","args":{"tag":"ev2","data":{"item":0}}}
hello eventunsub {"tag":"ev2"}
hello eventpush {"tag":"ev1","data":[1,2,"hello"]}
hello eventpush {"tag":"ev2","data":{"item":0}}
hello eventdel {"tag":"ev1"}
hello eventpush {"tag":"ev1","data":[1,2,"hello"]}
hello eventpush {"tag":"ev2","data":{"item":0}}
hello eventdel {"tag":"ev2"}
EOC
}

r() {
	while :; do commands; done |
	$CLI "localhost:$PORT/api?token=$TOKEN" > "$1" 2>&1 &
}

echo launch clients...
i=1
while test $i -le $count; do
	echo " + launch clients $i"
	r $(printf "$OUT" $i)
	i=$(expr $i + 1)
done
echo done
wait