Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
UCC
progcomp2013
Commits
e9e685cd
Commit
e9e685cd
authored
May 19, 2013
by
Sam Moore
Browse files
CGI script working; hopefully
parent
9b5054e5
Changes
4
Hide whitespace changes
Inline
Side-by-side
qchess/qchess.cgi
View file @
e9e685cd
...
...
@@ -9,7 +9,9 @@ import cgi
import
subprocess
import
time
import
threading
import
datetime
path
=
"../qchess-cgi-data/"
def
open_fifo
(
name
,
mode
,
timeout
=
None
):
if
timeout
==
None
:
...
...
@@ -20,9 +22,15 @@ def open_fifo(name, mode, timeout=None):
def
__init__
(
self
):
threading
.
Thread
.
__init__
(
self
)
self
.
result
=
None
self
.
exception
=
None
def
run
(
self
):
self
.
result
=
open
(
name
,
mode
)
try
:
self
.
result
=
open
(
name
,
mode
)
except
Exception
,
e
:
self
.
exception
=
e
self
.
result
=
None
w
=
Worker
()
...
...
@@ -32,16 +40,22 @@ def open_fifo(name, mode, timeout=None):
while
time
.
time
()
-
start
<
timeout
:
if
w
.
is_alive
()
==
False
:
w
.
join
()
if
w
.
exception
!=
None
:
raise
w
.
exception
return
w
.
result
time
.
sleep
(
0.1
)
if
w
.
is_alive
():
#sys.stderr.write("FIFO_TIMEOUT!\n")
if
mode
==
"r"
:
f
=
open
(
name
,
"w"
)
else
:
f
=
open
(
name
,
"r"
)
# Recursive to deal with possible race condition
try
:
if
mode
==
"r"
:
f
=
open_fifo
(
name
,
"w"
,
1
)
else
:
f
=
open_fifo
(
name
,
"r"
,
1
)
except
:
pass
#sys.stderr.write("Opened other end!\n")
while
w
.
is_alive
():
...
...
@@ -53,97 +67,140 @@ def open_fifo(name, mode, timeout=None):
raise
Exception
(
"FIFO_TIMEOUT"
)
else
:
w
.
join
()
if
w
.
exception
!=
None
:
raise
w
.
exception
return
w
.
result
def
quit
():
try
:
fifo_out
=
open_fifo
(
"../cgi-data/"
+
client
+
".in"
,
"w"
,
5
)
except
:
pass
else
:
fifo_out
.
write
(
"quit
\n
"
)
fifo_out
.
close
()
if
os
.
path
.
exists
(
path
+
client
+
".in"
)
and
os
.
path
.
exists
(
path
+
client
+
".out"
):
try
:
fifo_out
=
open_fifo
(
path
+
client
+
".in"
,
"w"
,
5
)
except
:
pass
else
:
if
fifo_out
!=
None
:
fifo_out
.
write
(
"quit
\n
"
)
fifo_out
.
close
()
try
:
fifo_in
=
open_fifo
(
"../cgi-data/"
+
client
+
".out"
,
"w"
,
5
)
except
:
pass
else
:
s
=
fifo_in
.
readline
().
strip
(
"
\r\n
"
)
while
s
!=
""
:
try
:
fifo_in
=
open_fifo
(
path
+
client
+
".out"
,
"r"
,
5
)
except
:
pass
else
:
if
fifo_in
!=
None
:
s
=
fifo_in
.
readline
().
strip
(
"
\r\n
"
)
while
s
!=
""
:
#print s
s
=
fifo_in
.
readline
().
strip
(
"
\r\n
"
)
fifo_in
.
close
()
s
=
fifo_in
.
readline
().
strip
(
"
\r\n
"
)
fifo_in
.
close
()
log
=
open
(
path
+
client
,
"a"
)
log
.
write
(
" -> %s
\n
"
%
str
(
datetime
.
datetime
.
now
()))
log
.
close
()
time
.
sleep
(
0.5
)
def
main
(
argv
):
print
"Content-Type: text/plain
\r\n\r\n
"
global
client
#form = cgi.FieldStorage()
#client = cgi.escape(os.environ["REMOTE_ADDR"])
form
=
cgi
.
FieldStorage
()
client
=
cgi
.
escape
(
os
.
environ
[
"REMOTE_ADDR"
])
#client = "127.0.0.1"
client
=
"127.0.0.1"
print
"Content-Type: text/plain
\r\n\r\n
"
try
:
request
=
argv
[
1
]
#request = argv[1]
request
=
form
[
"r"
]
except
:
request
=
None
mode
=
None
else
:
try
:
mode
=
form
[
"m"
]
except
:
mode
=
None
try
:
x
=
int
(
argv
[
1
])
y
=
int
(
argv
[
2
])
#x = int(argv[1])
#y = int(argv[2])
x
=
form
[
"x"
]
y
=
form
[
"y"
]
except
:
if
request
==
"quit"
:
quit
()
return
0
if
os
.
path
.
exists
(
"../cgi-bin/"
+
client
+
".in"
)
and
os
.
path
.
exists
(
"../cgi-bin/"
+
client
+
".out"
):
print
"Error: Game in progress expects x and y"
if
os
.
path
.
exists
(
path
+
client
+
".in"
)
and
os
.
path
.
exists
(
path
+
client
+
".out"
):
if
request
==
"quit"
:
print
"Quit."
quit
()
return
0
print
"Game in progress expects x and y."
return
1
else
:
print
"NEW GAME"
args
=
[
"./qchess.py"
]
if
request
==
None
:
args
+=
[
"@fifo:../cgi-data/"
+
client
,
"@internal:AgentBishop"
]
elif
request
==
"eigengame"
:
args
+=
[
"--server=progcomp.ucc.asn.au"
,
"@fifo:../cgi-data/"
+
client
]
elif
request
==
"start"
:
print
"New game."
args
=
[
path
+
"qchess.py"
,
"--no-graphics"
]
if
mode
==
None
or
mode
==
"bishop"
:
args
+=
[
"@fifo:../qchess-cgi-data/"
+
client
,
"@internal:AgentBishop"
]
if
mode
==
"random"
:
args
+=
[
"@fifo:../qchess-cgi-data/"
+
client
,
"@internal:AgentRandom"
]
elif
mode
==
"eigengame"
:
args
+=
[
"--server=progcomp.ucc.asn.au"
,
"@fifo:../qchess-cgi-data/"
+
client
]
subprocess
.
Popen
(
args
)
time
.
sleep
(
1
)
log
=
open
(
path
+
client
,
"a"
)
log
.
write
(
"%s"
%
str
(
datetime
.
datetime
.
now
()))
log
.
close
()
else
:
print
"No game in progress."
return
1
else
:
fifo_out
=
open_fifo
(
"../cgi-data/"
+
client
+
".in"
,
"w"
)
fifo_out
.
write
(
"%d %d
\n
"
%
(
x
,
y
))
fifo_out
.
close
()
if
not
(
os
.
path
.
exists
(
path
+
client
+
".in"
)
and
os
.
path
.
exists
(
path
+
client
+
".out"
)):
print
"No game in progress."
return
1
try
:
fifo_out
=
open_fifo
(
path
+
client
+
".in"
,
"w"
)
except
:
quit
()
else
:
fifo_out
.
write
(
"%d %d
\n
"
%
(
x
,
y
))
fifo_out
.
close
()
sys
.
stderr
.
write
(
"
\n
cgi read from fifo here
\n
"
)
#
sys.stderr.write("\ncgi read from fifo here\n")
try
:
fifo_in
=
open_fifo
(
"../cgi-data/"
+
client
+
".out"
,
"r"
)
fifo_in
=
open_fifo
(
path
+
client
+
".out"
,
"r"
)
except
:
quit
()
else
:
sys
.
stderr
.
write
(
"Opened fine
\n
"
)
#
sys.stderr.write("Opened fine\n")
s
=
fifo_in
.
readline
().
strip
(
"
\r\n
"
)
while
s
!=
"SELECT?"
and
s
!=
"MOVE?"
and
s
.
split
(
" "
)[
0
]
not
in
[
"white"
,
"black"
]:
while
s
!=
"SELECT?"
and
s
!=
"MOVE?"
and
not
s
.
split
(
" "
)[
0
]
in
[
"white"
,
"black"
]:
if
s
!=
""
:
print
s
s
=
fifo_in
.
readline
().
strip
(
"
\r\n
"
)
print
s
fifo_in
.
close
()
if
s
.
split
(
" "
)[
0
]
in
[
"white"
,
"black"
]:
#sys.stderr.write("cgi quit!\n")
quit
()
sys
.
stderr
.
write
(
"Done
\n
"
)
#
sys.stderr.write("Done\n")
return
0
...
...
@@ -151,5 +208,6 @@ if __name__ == "__main__":
try
:
sys
.
exit
(
main
(
sys
.
argv
))
except
Exception
,
e
:
print
"Exception: "
,
e
print
e
sys
.
stderr
.
write
(
str
(
e
)
+
"
\n
"
)
sys
.
exit
(
1
)
qchess/qchess.py
View file @
e9e685cd
...
...
@@ -663,10 +663,15 @@ def open_fifo(name, mode, timeout=None):
def
__init__
(
self
):
threading
.
Thread
.
__init__
(
self
)
self
.
result
=
None
self
.
exception
=
None
def
run
(
self
):
self
.
result
=
open
(
name
,
mode
)
try
:
self
.
result
=
open
(
name
,
mode
)
except
Exception
,
e
:
self
.
exception
=
e
self
.
result
=
None
w
=
Worker
()
...
...
@@ -676,16 +681,22 @@ def open_fifo(name, mode, timeout=None):
while
time
.
time
()
-
start
<
timeout
:
if
w
.
is_alive
()
==
False
:
w
.
join
()
if
w
.
exception
!=
None
:
raise
w
.
exception
return
w
.
result
time
.
sleep
(
0.1
)
if
w
.
is_alive
():
#sys.stderr.write("FIFO_TIMEOUT!\n")
if
mode
==
"r"
:
f
=
open
(
name
,
"w"
)
else
:
f
=
open
(
name
,
"r"
)
# Recursive to deal with possible race condition
try
:
if
mode
==
"r"
:
f
=
open_fifo
(
name
,
"w"
,
1
)
else
:
f
=
open_fifo
(
name
,
"r"
,
1
)
except
:
pass
#sys.stderr.write("Opened other end!\n")
while
w
.
is_alive
():
...
...
@@ -697,6 +708,8 @@ def open_fifo(name, mode, timeout=None):
raise
Exception
(
"FIFO_TIMEOUT"
)
else
:
w
.
join
()
if
w
.
exception
!=
None
:
raise
w
.
exception
return
w
.
result
...
...
@@ -1792,7 +1805,7 @@ class GameThread(StoppableThread):
except
Exception
,
e
:
#if False:
result
=
e
.
message
#
sys.stderr.write(result + "\n")
sys
.
stderr
.
write
(
"qchess.py exception: "
+
result
+
"
\n
"
)
self
.
stop
()
...
...
@@ -2974,4 +2987,4 @@ if __name__ == "__main__":
# --- main.py --- #
# EOF - created from make on Sun May 19
00:54:03
WST 2013
# EOF - created from make on Sun May 19
12:36:10
WST 2013
qchess/src/game.py
View file @
e9e685cd
...
...
@@ -147,7 +147,7 @@ class GameThread(StoppableThread):
except
Exception
,
e
:
#if False:
result
=
e
.
message
#
sys.stderr.write(result + "\n")
sys
.
stderr
.
write
(
"qchess.py exception: "
+
result
+
"
\n
"
)
self
.
stop
()
...
...
qchess/src/player.py
View file @
e9e685cd
...
...
@@ -38,10 +38,15 @@ def open_fifo(name, mode, timeout=None):
def
__init__
(
self
):
threading
.
Thread
.
__init__
(
self
)
self
.
result
=
None
self
.
exception
=
None
def
run
(
self
):
self
.
result
=
open
(
name
,
mode
)
try
:
self
.
result
=
open
(
name
,
mode
)
except
Exception
,
e
:
self
.
exception
=
e
self
.
result
=
None
w
=
Worker
()
...
...
@@ -51,16 +56,22 @@ def open_fifo(name, mode, timeout=None):
while
time
.
time
()
-
start
<
timeout
:
if
w
.
is_alive
()
==
False
:
w
.
join
()
if
w
.
exception
!=
None
:
raise
w
.
exception
return
w
.
result
time
.
sleep
(
0.1
)
if
w
.
is_alive
():
#sys.stderr.write("FIFO_TIMEOUT!\n")
if
mode
==
"r"
:
f
=
open
(
name
,
"w"
)
else
:
f
=
open
(
name
,
"r"
)
# Recursive to deal with possible race condition
try
:
if
mode
==
"r"
:
f
=
open_fifo
(
name
,
"w"
,
1
)
else
:
f
=
open_fifo
(
name
,
"r"
,
1
)
except
:
pass
#sys.stderr.write("Opened other end!\n")
while
w
.
is_alive
():
...
...
@@ -72,6 +83,8 @@ def open_fifo(name, mode, timeout=None):
raise
Exception
(
"FIFO_TIMEOUT"
)
else
:
w
.
join
()
if
w
.
exception
!=
None
:
raise
w
.
exception
return
w
.
result
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment