Subversion Server


Clans

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

Blame information for rev 102

Line No. Rev Author Line
1 86 kgs #!/bin/bash
2 102 kgs
3 102 kgs CGOBAN_JAR=~/cgoban.jar
4 102 kgs LOCKFILE=~/mes_lockfile
5 102 kgs SCREENSHOT=~/mes_ss.png
6 102 kgs VGOUT=~/mes_vgout
7 102 kgs PAT=~/scripts/patterns
8 102 kgs FBDIR=~/mes_fb
9 102 kgs SLEEPLOCK=~/scripts/sleeplock.sh
10 102 kgs  
11 102 kgs function kgs_start() {
12 102 kgs         if [ -e $LOCKFILE ]; then
13 102 kgs                 kill `cat $LOCKFILE`
14 102 kgs                 sleep 1
15 102 kgs         fi
16 102 kgs         killall Xvfb 2> /dev/null && echo "oops" && sleep 1
17 102 kgs         rm -f $LOCKFILE
18 102 kgs         xvfb-run -f ~/.Xauthority -n 97 -s '-screen 0 800x600x8 -fbdir '$FBDIR $SLEEPLOCK $LOCKFILE &
19 102 kgs         for I in $(seq 1 10); do
20 102 kgs                 if [ -e $LOCKFILE ]; then
21 102 kgs                         java -jar $CGOBAN_JAR &
22 102 kgs                         x11vnc -passwd cccccccc -forever -viewonly -quiet > /dev/null 2> /dev/null &
23 102 kgs                         return 0
24 86 kgs                 fi
25 102 kgs                 sleep 1
26 86 kgs         done
27 102 kgs         return 1
28 86 kgs }
29 102 kgs  
30 102 kgs function err() {
31 102 kgs         echo "$1" >&2
32 102 kgs         exit 1
33 86 kgs }
34 102 kgs  
35 102 kgs function screenshot() {
36 102 kgs         #import -window root -depth 8 $SCREENSHOT || err "Screenshot failed"
37 102 kgs convert $FBDIR/Xvfb_screen0 $SCREENSHOT || err "Screenshot failed"
38 86 kgs }
39 102 kgs  
40 102 kgs function vt() {
41 102 kgs         screenshot
42 102 kgs         if visgrep -t 100 $SCREENSHOT $PAT/$1.pat $PAT/$1.pat > $VGOUT; then
43 102 kgs                 J="$(grep ' 0$' $VGOUT|head -n 1|sed 's/ 0//;s/,/ /')"
44 102 kgs                 if [ -n "$J" ]; then
45 102 kgs                         echo "$J"
46 102 kgs                         echo "Early find" 2>&1
47 102 kgs                         return 0
48 102 kgs                 fi
49 102 kgs         fi
50 102 kgs         if visgrep -t 5000 $SCREENSHOT $PAT/$1.pat $PAT/$1.pat > $VGOUT; then
51 102 kgs                 J="$(grep ' 0$' $VGOUT|head -n 1|sed 's/ 0//;s/,/ /')"
52 102 kgs                 if [ -n "$J" ]; then
53 102 kgs                         echo "$J"
54 102 kgs                         return 0
55 102 kgs                 fi
56 102 kgs         fi
57 102 kgs         return 1
58 86 kgs }
59 102 kgs  
60 102 kgs function vg() {
61 102 kgs         for I in $(seq 1 10); do
62 102 kgs                 vt $1 && return 0
63 102 kgs                 echo "Waiting on $1" >&2
64 102 kgs                 sleep 1
65 102 kgs         done
66 102 kgs         echo "FAIL" >&2
67 102 kgs         return 1
68 102 kgs }
69 102 kgs  
70 102 kgs function click() {
71 102 kgs         J="$(vg $1)"
72 102 kgs         [ -z "$J" ] && return 1
73 102 kgs         xte "mousemove $J" "mouseclick 1"
74 102 kgs         echo xte "mousemove $J" "mouseclick 1"
75 86 kgs }
76 102 kgs  
77 102 kgs function kgs_login() {
78 102 kgs         kgs_start || err "Could not start server"
79 102 kgs  
80 102 kgs         click playonkgs || err "Could not find play button"
81 102 kgs  
82 102 kgs         click login_ok || err "Could not find login button"
83 86 kgs }
84 102 kgs  
85 102 kgs function send_mes() {
86 102 kgs         dst="$(echo "$1"|sed 's/[^a-zA-Z0-9]//g')"
87 102 kgs         mes="$(echo "$2"|sed 's/[^a-zA-Z0-9`!"$%^&*()_+={}[]:;@'\''#~\/?.>,<\\|-]//g')"
88 102 kgs
89 102 kgs         click usermenu || err "Could not find user menu"
90 102 kgs  
91 102 kgs         click leavemessage || err "Could not find Leave Message button"
92 102 kgs  
93 102 kgs         click mes_name || err "Could not find name box"
94 102 kgs  
95 102 kgs         # Enter target name
96 102 kgs xte "str $dst" "key Tab"
97 102 kgs  
98 102 kgs # click mes_content || err "Could not find content box"
99 102 kgs
100 102 kgs         # Enter message
101 102 kgs echo WTF?!?!?
102 102 kgs         sleep 1
103 102 kgs         echo "$mes" | while read I; do xte "str $I" "key Return"; done
104 102 kgs         sleep 1
105 102 kgs         echo WTF?!?!?
106 102 kgs  
107 102 kgs         click mes_ok || err "Could not find OK box"
108 102 kgs  
109 102 kgs         # Get the mouse clear
110 102 kgs xte "mousemove 0 0"
111 102 kgs         sleep 1
112 102 kgs  
113 102 kgs         # Check user existed...
114 102 kgs for I in $(seq 1 10); do
115 102 kgs                 if vt mes_ok > /dev/null; then
116 102 kgs                         echo Still here...
117 102 kgs                         if vt mes_miss > /dev/null; then
118 102 kgs                                 echo Fail!
119 102 kgs                                 sleep 1
120 102 kgs                                 click mes_miss_ok
121 102 kgs                                 sleep 1
122 102 kgs                                 click mes_cancel
123 102 kgs                                 return 1
124 102 kgs                         fi
125 102 kgs                 else
126 102 kgs                         echo Gone.
127 102 kgs                         return 0
128 102 kgs                 fi
129 102 kgs  
130 102 kgs                 sleep 1
131 102 kgs         done
132 102 kgs  
133 102 kgs         # Seems to have gone fine, but the message box is still up
134 102 kgs
135 102 kgs         err "Message box never removed from screen"
136 86 kgs }
137 102 kgs  
138 102 kgs export DISPLAY=:97
139 102 kgs  
140 102 kgs kgs_login
141 102 kgs  
142 102 kgs while true; do
143 102 kgs         for I in $(seq 1 10); do
144 102 kgs                 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;' | (
145 102 kgs                         read id
146 102 kgs                         read to
147 102 kgs                         if [ -z "$to" ]; then
148 102 kgs                                 exit 1
149 102 kgs                         fi
150 102 kgs                         message="$(cat)"
151 102 kgs                         echo "$id $to $message"
152 102 kgs                         if send_mes "$to" "$message"; then
153 102 kgs                                 mysql -Nsre "DELETE FROM message_queue WHERE id = $id;"
154 102 kgs                         else
155 102 kgs                                 if [ "$?" = "1" ]; then
156 102 kgs                                         mysql -Nsre "UPDATE message_queue SET err=\"bad username\" WHERE id = $id;"
157 102 kgs                                 else
158 102 kgs                                         mysql -Nsre "UPDATE message_queue SET err=\"who knows\" WHERE id = $id;"
159 102 kgs                                 fi
160 102 kgs                         fi
161 102 kgs                 ) then
162 102 kgs                         break
163 86 kgs                 fi
164 102 kgs                 # No messages for 10 waits
165 102 kgs if [ "$I" = "10" ]; then
166 102 kgs                         exit 0
167 102 kgs                 fi
168 86 kgs                 sleep 10
169 102 kgs         done
170 86 kgs done
171 102 kgs  
172 102 kgs killall $(cat $LOCKFILE)

Powered by WebSVN v1.61