#!/bin/bash
CGOBAN_JAR=~/cgoban.jar
LOCKFILE=~/mes_lockfile
SCREENSHOT=~/mes_ss.png
VGOUT=~/mes_vgout
PAT=~/scripts/patterns
FBDIR=~/mes_fb
SLEEPLOCK=~/scripts/sleeplock.sh
function kgs_start() {
if [ -e $LOCKFILE ]; then
kill `cat $LOCKFILE`
sleep 1
fi
killall Xvfb 2> /dev/null && echo "oops" && sleep 1
rm -f $LOCKFILE
xvfb-run -f ~/.Xauthority -n 97 -s '-screen 0 800x600x8 -fbdir '$FBDIR $SLEEPLOCK $LOCKFILE &
for I in $(seq 1 10); do
if [ -e $LOCKFILE ]; then
java -jar $CGOBAN_JAR &
x11vnc -passwd cccccccc -forever -viewonly -quiet > /dev/null 2> /dev/null &
return 0
fi
sleep 1
done
return 1
}
function err() {
echo "$1" >&2
exit 1
}
function screenshot() {
#import -window root -depth 8 $SCREENSHOT || err "Screenshot failed"
convert $FBDIR/Xvfb_screen0 $SCREENSHOT || err "Screenshot failed"
}
function vt() {
screenshot
if visgrep -t 100 $SCREENSHOT $PAT/$1.pat $PAT/$1.pat > $VGOUT; then
J="$(grep ' 0$' $VGOUT|head -n 1|sed 's/ 0//;s/,/ /')"
if [ -n "$J" ]; then
echo "$J"
echo "Early find" 2>&1
return 0
fi
fi
if visgrep -t 5000 $SCREENSHOT $PAT/$1.pat $PAT/$1.pat > $VGOUT; then
J="$(grep ' 0$' $VGOUT|head -n 1|sed 's/ 0//;s/,/ /')"
if [ -n "$J" ]; then
echo "$J"
return 0
fi
fi
return 1
}
function vg() {
for I in $(seq 1 10); do
vt $1 && return 0
echo "Waiting on $1" >&2
sleep 1
done
echo "FAIL" >&2
return 1
}
function click() {
J="$(vg $1)"
[ -z "$J" ] && return 1
xte "mousemove $J" "mouseclick 1"
echo xte "mousemove $J" "mouseclick 1"
}
function kgs_login() {
kgs_start || err "Could not start server"
click playonkgs || err "Could not find play button"
click login_ok || err "Could not find login button"
}
function send_mes() {
dst="$(echo "$1"|sed 's/[^a-zA-Z0-9]//g')"
mes="$(echo "$2"|sed 's/[^a-zA-Z0-9`!"$%^&*()_+={}[]:;@'\''#~\/?.>,<\\|-]//g')"
click usermenu || err "Could not find user menu"
click leavemessage || err "Could not find Leave Message button"
click mes_name || err "Could not find name box"
# Enter target name
xte "str $dst" "key Tab"
# click mes_content || err "Could not find content box"
# Enter message
echo WTF?!?!?
sleep 1
echo "$mes" | while read I; do xte "str $I" "key Return"; done
sleep 1
echo WTF?!?!?
click mes_ok || err "Could not find OK box"
# Get the mouse clear
xte "mousemove 0 0"
sleep 1
# Check user existed...
for I in $(seq 1 10); do
if vt mes_ok > /dev/null; then
echo Still here...
if vt mes_miss > /dev/null; then
echo Fail!
sleep 1
click mes_miss_ok
sleep 1
click mes_cancel
return 1
fi
else
echo Gone.
return 0
fi
sleep 1
done
# Seems to have gone fine, but the message box is still up
err "Message box never removed from screen"
}
export DISPLAY=:97
kgs_login
while true; do
for I in $(seq 1 10); do
if mysql -Nsre 'SELECT @i:=id FROM message_queue WHERE err IS NULL LIMIT 1; SELECT username FROM message_queue WHERE id = @i; SELECT message FROM message_queue WHERE id = @i;' | (
read id
read to
if [ -z "$to" ]; then
exit 1
fi
message="$(cat)"
echo "$id $to $message"
if send_mes "$to" "$message"; then
mysql -Nsre "DELETE FROM message_queue WHERE id = $id;"
else
if [ "$?" = "1" ]; then
mysql -Nsre "UPDATE message_queue SET err=\"bad username\" WHERE id = $id;"
else
mysql -Nsre "UPDATE message_queue SET err=\"who knows\" WHERE id = $id;"
fi
fi
) then
break
fi
# No messages for 10 waits
if [ "$I" = "10" ]; then
exit 0
fi
sleep 10
done
done
killall $(cat $LOCKFILE)
|