Subversion Server


Clans

[/] [scripts/] [message_send.sh] - Rev 102

Compare with Previous - Blame

#!/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)

Powered by WebSVN v1.61