Subversion Server


Clans

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

Diff between revs 101 and 102

Show entire file

Rev 101 Rev 102
Line 1... Line 1...
#!/bin/bash #!/bin/bash
function wait_for_window() {
        name="$1" CGOBAN_JAR=~/cgoban.jar
        while sleep 1; do LOCKFILE=~/mes_lockfile
                echo "$name" SCREENSHOT=~/mes_ss.png
                if xwininfo -wm -name "$name" > /dev/null 2> /dev/null; then VGOUT=~/mes_vgout
                        break 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                 fi
                  sleep 1
        done         done
          return 1
} }
function cgoban_start() {  
# /home/kgs/scripts/xvfb java -jar /home/kgs/cgoban.jar 2> /dev/null > /dev/null & function err() {
java -jar /home/kgs/cgoban.jar & #2> /dev/null > /dev/null &         echo "$1" >&2
wait_for_window "CGoban: Main Window"         exit 1
        sleep 1 }
}  
function cgoban_exit() { function screenshot() {
        main_id=$(xwininfo -children -name 'CGoban: Main Window'|grep xwininfo|sed 's/.*\(0x[0-9a-f]*\).*/\1/')         #import -window root -depth 8 $SCREENSHOT || err "Screenshot failed"
        xkill -id $main_id > /dev/null 2> /dev/null convert $FBDIR/Xvfb_screen0 $SCREENSHOT || err "Screenshot failed"
} }
function cgoban_login {  
        xte 'key space' # Login->Login box function vt() {
wait_for_window "KGS: Log In"         screenshot
        sleep 3         if visgrep -t 100 $SCREENSHOT $PAT/$1.pat $PAT/$1.pat > $VGOUT; then
        xte 'key Return' # Username                 J="$(grep ' 0$' $VGOUT|head -n 1|sed 's/ 0//;s/,/ /')"
sleep 3                 if [ -n "$J" ]; then
        xte 'key Return' # Password->Rooms list                         echo "$J"
wait_for_window "KGS: Rooms"                         echo "Early find" 2>&1
        sleep 3                         return 0
}                 fi
function cgoban_open_message() {         fi
        menu=$(xwininfo -name 'KGS: Rooms'|perl -ne 'BEGIN{$y=10;$x=10}if(/Absolute upper-left Y:\s+(\d+)/){$y+=$1}if(/Absolute upper-left X:.*?(\d+)/){$x+=$1}END{print"$x $y\n"}')         if visgrep -t 5000 $SCREENSHOT $PAT/$1.pat $PAT/$1.pat > $VGOUT; then
        xte "mousemove $menu" # Select menu                 J="$(grep ' 0$' $VGOUT|head -n 1|sed 's/ 0//;s/,/ /')"
xte 'mouseclick 1'                 if [ -n "$J" ]; then
        sleep 3                         echo "$J"
        xte 'key Right'                         return 0
        sleep 2                 fi
        xte 'key Right' # User menu         fi
sleep 2         return 1
        xte 'key Up' # Leave message }
sleep 2  
        xte 'key Return' # -> Leave message function vg() {
wait_for_window "KGS: Leave Message"         for I in $(seq 1 10); do
        sleep 3                 vt $1 && return 0
}                 echo "Waiting on $1" >&2
function xte_str() {                 sleep 1
        str=$1         done
        echo "$str"|perl -ne '         echo "FAIL" >&2
                use utf8;         return 1
                my $shift=0; }
                my @out;  
                my %conv = ( function click() {
                        "`" => "grave",         J="$(vg $1)"
                        "¬" => "shift|grave",         [ -z "$J" ] && return 1
                        "!" => "shift|1",         xte "mousemove $J" "mouseclick 1"
                        "\"" => "shift|2",         echo xte "mousemove $J" "mouseclick 1"
                        "£" => "shift|3", }
                        "\$" => "shift|4",  
                        "%" => "shift|5", function kgs_login() {
                        "^" => "shift|6",         kgs_start || err "Could not start server"
                        "&" => "shift|7",  
                        "*" => "shift|8",         click playonkgs || err "Could not find play button"
                        "(" => "shift|9",  
                        ")" => "shift|0",         click login_ok || err "Could not find login button"
                        "-" => "minus", }
                        "_" => "shift|minus",  
                        "=" => "equal", function send_mes() {
                        "+" => "shift|equal",         dst="$(echo "$1"|sed 's/[^a-zA-Z0-9]//g')"
                        "[" => "bracketleft",         mes="$(echo "$2"|sed 's/[^a-zA-Z0-9`!"$%^&*()_+={}[]:;@'\''#~\/?.>,<\\|-]//g')"
                        "{" => "shift|bracketleft",
                        "]" => "bracketright",         click usermenu || err "Could not find user menu"
                        "}" => "shift|bracketright",  
                        ";" => "semicolon",         click leavemessage || err "Could not find Leave Message button"
                        "'\''" => "apostrophe",  
                        "#" => "numbersign",         click mes_name || err "Could not find name box"
                        "," => "comma",  
                        "." => "period",         # Enter target name
                        "/" => "slash", xte "str $dst" "key Tab"
                        ":" => "shift|semicolon",  
                        "@" => "shift|apostrophe", # click mes_content || err "Could not find content box"
                        "~" => "shift|numbersign",
                        "<" => "shift|comma",         # Enter message
                        ">" => "shift|period", echo WTF?!?!?
                        "?" => "shift|slash",         sleep 1
                        " " => "space",         echo "$mes" | while read I; do xte "str $I" "key Return"; done
                        "\n" => "Return",         sleep 1
                        "\r" => "Return",         echo WTF?!?!?
                );  
                for (split //) {         click mes_ok || err "Could not find OK box"
                        my $needshift;  
                        my $key;         # Get the mouse clear
                        if ($key = $conv{$_}) { xte "mousemove 0 0"
                                $needshift = 1 if $key =~ s/shift\|//;         sleep 1
                        } elsif (/[a-zA-Z0-9]/) {  
                                $key = $_;         # Check user existed...
                                $needshift = 1 if ord $key >= ord("A") && ord $key <= ord("Z"); for I in $(seq 1 10); do
                                $key = lc $key;                 if vt mes_ok > /dev/null; then
                        } else {                         echo Still here...
                                open ERR, ">>/home/kgs/test";                         if vt mes_miss > /dev/null; then
                                print ERR "Error char: $_ (".ord($_).")\n";                                 echo Fail!
                                close ERR;                                 sleep 1
                        }                                 click mes_miss_ok
                        if ($needshift && !$shift) {                                 sleep 1
                                $shift = 1;                                 click mes_cancel
                                push @out, "keydown Shift_L";                                 return 1
                        } elsif ($shift && !$needshift) {                         fi
                                push @out, "keyup Shift_L";                 else
                                undef $shift;                         echo Gone.
                        }                         return 0
                        push @out, "key $key";                 fi
                }  
                if ($shift) {                 sleep 1
                        push @out, "keyup Shift_L";         done
                }  
                print join("\n",@out)."\n";         # Seems to have gone fine, but the message box is still up
                system("/usr/bin/xte", @out);
        '         err "Message box never removed from screen"
} }
function cgoban_enter_message() {  
        to="$1" export DISPLAY=:97
        message="$2"  
        xte 'key Tab' # Select username box kgs_login
sleep 3  
        xte_str "$to" # username while true; do
sleep 3         for I in $(seq 1 10); do
        xte_str "$message" # message                 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;' | (
sleep 10                         read id
        button=$(xwininfo -name 'KGS: Leave Message'|perl -ne 'BEGIN{$y=-10;$x=10}if(/Absolute upper-left Y:\s+(\d+)/||/Height:\s+(\d+)/){$y+=$1}if(/Absolute upper-left X:.*?(\d+)/){$x+=$1}END{print"$x $y\n"}')  
        xte "mousemove $button"  
        xte 'mouseclick 1'  
        sleep 3  
}  
function xte() {  
        echo "xte: $1"  
        /usr/bin/xte "$1"  
}  
evilwm &  
sleep 5  
killall -9 evilwm  
sleep 2  
awesome &  
sleep 5  
killall -9 awesome  
sleep 2  
openbox &  
xmodmap /home/kgs/.xmodmap  
sleep 1  
cgoban_start  
cgoban_login  
count=0  
while [ $count -le 5 ]; do  
        if mysql -Nsre 'SELECT username FROM message_queue LIMIT 1; SELECT message FROM message_queue LIMIT 1;' | (  
                read to                 read to
                if [ -z "$to" ]; then                 if [ -z "$to" ]; then
                        exit 1                         exit 1
                fi                 fi
                message="$(cat)"                 message="$(cat)"
                echo "To: $to"                         echo "$id $to $message"
                echo "$message"                         if send_mes "$to" "$message"; then
                cgoban_open_message                                 mysql -Nsre "DELETE FROM message_queue WHERE id = $id;"
                cgoban_enter_message "$to" "$message"  
                mysql -Nsre 'DELETE FROM message_queue LIMIT 1;'  
        ) then  
                count=0  
        else         else
                sleep 10                                 if [ "$?" = "1" ]; then
                count=$(expr $count + 1)                                         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         fi
                  sleep 10
          done
done done
cgoban_exit  
  killall $(cat $LOCKFILE)
   

Powered by WebSVN v1.61