git.ucc.asn.au
/
progcomp2013.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
068745c
)
Fix bugs with FifoPlayer and Networking
author
Sam Moore
<
[email protected]
>
Mon, 24 Jun 2013 15:56:14 +0000
(23:56 +0800)
committer
Sam Moore
<
[email protected]
>
Mon, 24 Jun 2013 15:56:14 +0000
(23:56 +0800)
qchess/qchess.py
patch
|
blob
|
history
qchess/src/main.py
patch
|
blob
|
history
qchess/src/network.py
patch
|
blob
|
history
qchess/src/player.py
patch
|
blob
|
history
qchess/src/server.py
patch
|
blob
|
history
diff --git
a/qchess/qchess.py
b/qchess/qchess.py
index
1dd8691
..
1279ec1
100755
(executable)
--- a/
qchess/qchess.py
+++ b/
qchess/qchess.py
@@
-651,6
+651,8
@@
class Player():
def base_player(self):
return self
def base_player(self):
return self
+
+
@@
-722,6
+724,7
@@
class FifoPlayer(Player):
Player.__init__(self, name, colour)
os.mkfifo(self.name+".in")
os.mkfifo(self.name+".out")
Player.__init__(self, name, colour)
os.mkfifo(self.name+".in")
os.mkfifo(self.name+".out")
+
try:
self.fifo_out = open_fifo(self.name+".out","w", FifoPlayer.timeout)
try:
self.fifo_out = open_fifo(self.name+".out","w", FifoPlayer.timeout)
@@
-731,10
+734,7
@@
class FifoPlayer(Player):
self.fifo_out.write("START "+colour+"\n")
self.fifo_out.close()
self.fifo_out.write("START "+colour+"\n")
self.fifo_out.close()
-
-
-
-
+
def update(self, result):
sys.stderr.write("update fifo called\n")
try:
def update(self, result):
sys.stderr.write("update fifo called\n")
try:
@@
-780,15
+780,16
@@
class FifoPlayer(Player):
try:
self.fifo_out = open_fifo(self.name+".out", "w", FifoPlayer.timeout)
except:
try:
self.fifo_out = open_fifo(self.name+".out", "w", FifoPlayer.timeout)
except:
- os.remove(self.name+".in")
- os.remove(self.name+".out")
- #raise Exception("FIFO_TIMEOUT")
-
+ pass
else:
self.fifo_out.write(result + "\n")
self.fifo_out.close()
else:
self.fifo_out.write(result + "\n")
self.fifo_out.close()
+
+ try:
os.remove(self.name+".in")
os.remove(self.name+".out")
os.remove(self.name+".in")
os.remove(self.name+".out")
+ except OSError:
+ pass
# Player that runs from another process
class ExternalAgent(Player):
# Player that runs from another process
class ExternalAgent(Player):
@@
-796,6
+797,7
@@
class ExternalAgent(Player):
def __init__(self, name, colour):
Player.__init__(self, name, colour)
def __init__(self, name, colour):
Player.__init__(self, name, colour)
+ #raise Exception("waht")
self.p = subprocess.Popen(name,bufsize=0,stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True,universal_newlines=True)
self.send_message(colour)
self.p = subprocess.Popen(name,bufsize=0,stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True,universal_newlines=True)
self.send_message(colour)
@@
-877,6
+879,7
@@
class HumanPlayer(Player):
def __init__(self, name, colour):
Player.__init__(self, name, colour)
def __init__(self, name, colour):
Player.__init__(self, name, colour)
+
# Select your preferred account
def select(self):
if isinstance(graphics, GraphicsThread):
# Select your preferred account
def select(self):
if isinstance(graphics, GraphicsThread):
@@
-945,7
+948,8
@@
class InternalAgent(Player):
self.board = Board(style = "agent")
self.board = Board(style = "agent")
-
+ def argForm(self):
+ return "@internal:"+self.name
def update(self, result):
def update(self, result):
@@
-1434,8
+1438,10
@@
class Network():
if self.src in ready:
s = self.src.recv(1)
else:
if self.src in ready:
s = self.src.recv(1)
else:
- raise Exception("UNRESPONSIVE")
+ raise Exception("NET_UNRESPONSIVE")
+
+ debug("Network get_response s = " + str(s))
while s[len(s)-1] != '\n':
# Timeout on each character in the message
while s[len(s)-1] != '\n':
# Timeout on each character in the message
@@
-1446,7
+1452,7
@@
class Network():
if self.src in ready:
s += self.src.recv(1)
else:
if self.src in ready:
s += self.src.recv(1)
else:
- raise Exception("UNRESPONSIVE")
+ raise Exception("
NET_
UNRESPONSIVE")
return s.strip(" \r\n")
return s.strip(" \r\n")
@@
-1460,7
+1466,7
@@
class Network():
if self.src in ready:
self.src.send(s + "\n")
else:
if self.src in ready:
self.src.send(s + "\n")
else:
- raise Exception("UNRESPONSIVE")
+ raise Exception("
NET_
UNRESPONSIVE")
@@
-2607,13
+2613,13
@@
def dedicated_server():
def client(addr, player="@human"):
def client(addr, player="@human"):
-
+ debug("Client " + player + " starts")
s = socket.socket()
s.connect((addr, 4562))
[colour,port] = s.recv(1024).strip(" \r\n").split(" ")
s = socket.socket()
s.connect((addr, 4562))
[colour,port] = s.recv(1024).strip(" \r\n").split(" ")
-
#
debug("Colour: " + colour + ", port: " + port)
+ debug("Colour: " + colour + ", port: " + port)
s.shutdown(socket.SHUT_RDWR)
s.close()
s.shutdown(socket.SHUT_RDWR)
s.close()
@@
-2623,7
+2629,8
@@
def client(addr, player="@human"):
else:
p = subprocess.Popen(["python", "qchess.py", "@network:"+addr+":"+port, player])
p.wait()
else:
p = subprocess.Popen(["python", "qchess.py", "@network:"+addr+":"+port, player])
p.wait()
- return 0# --- server.py --- #
+ return 0
+# --- server.py --- #
#!/usr/bin/python -u
# Do you know what the -u does? It unbuffers stdin and stdout
#!/usr/bin/python -u
# Do you know what the -u does? It unbuffers stdin and stdout
@@
-2646,6
+2653,7
@@
sleep_timeout = None
[game, graphics] = [None, None]
def make_player(name, colour):
[game, graphics] = [None, None]
def make_player(name, colour):
+ debug(name)
if name[0] == '@':
if name[1:] == "human":
return HumanPlayer(name, colour)
if name[0] == '@':
if name[1:] == "human":
return HumanPlayer(name, colour)
@@
-2736,17
+2744,7
@@
def main(argv):
i += 1
arg = argv[i]
if arg[0] != '-':
i += 1
arg = argv[i]
if arg[0] != '-':
- p = make_player(arg, colour)
- if not isinstance(p, Player):
- sys.stderr.write(sys.argv[0] + " : Fatal error creating " + colour + " player\n")
- return 100
- players.append(p)
- if colour == "white":
- colour = "black"
- elif colour == "black":
- pass
- else:
- sys.stderr.write(sys.argv[0] + " : Too many players (max 2)\n")
+ players.append(arg)
continue
# Option parsing goes here
continue
# Option parsing goes here
@@
-2831,11
+2829,23
@@
def main(argv):
sys.stderr.write("Only a single player may be provided when --server is used\n")
return 1
if len(players) == 1:
sys.stderr.write("Only a single player may be provided when --server is used\n")
return 1
if len(players) == 1:
- return client(server_addr, players[0]
.name
)
+ return client(server_addr, players[0])
else:
return client(server_addr)
else:
return client(server_addr)
-
+ for i in xrange(len(players)):
+ p = make_player(players[i], colour)
+ if not isinstance(p, Player):
+ sys.stderr.write(sys.argv[0] + " : Fatal error creating " + colour + " player\n")
+ return 100
+ players[i] = p
+ if colour == "white":
+ colour = "black"
+ elif colour == "black":
+ pass
+ else:
+ sys.stderr.write(sys.argv[0] + " : Too many players (max 2)\n")
+
# Create the board
# Construct a GameThread! Make it global! Damn the consequences!
# Create the board
# Construct a GameThread! Make it global! Damn the consequences!
@@
-3003,4
+3013,4
@@
if __name__ == "__main__":
# --- main.py --- #
# --- main.py --- #
-# EOF - created from make on
Friday 21 June 18:15:14
WST 2013
+# EOF - created from make on
Monday 24 June 23:55:46
WST 2013
diff --git
a/qchess/src/main.py
b/qchess/src/main.py
index
44aa360
..
3bb80f2
100644
(file)
--- a/
qchess/src/main.py
+++ b/
qchess/src/main.py
@@
-20,6
+20,7
@@
sleep_timeout = None
[game, graphics] = [None, None]
def make_player(name, colour):
[game, graphics] = [None, None]
def make_player(name, colour):
+ debug(name)
if name[0] == '@':
if name[1:] == "human":
return HumanPlayer(name, colour)
if name[0] == '@':
if name[1:] == "human":
return HumanPlayer(name, colour)
@@
-110,17
+111,7
@@
def main(argv):
i += 1
arg = argv[i]
if arg[0] != '-':
i += 1
arg = argv[i]
if arg[0] != '-':
- p = make_player(arg, colour)
- if not isinstance(p, Player):
- sys.stderr.write(sys.argv[0] + " : Fatal error creating " + colour + " player\n")
- return 100
- players.append(p)
- if colour == "white":
- colour = "black"
- elif colour == "black":
- pass
- else:
- sys.stderr.write(sys.argv[0] + " : Too many players (max 2)\n")
+ players.append(arg)
continue
# Option parsing goes here
continue
# Option parsing goes here
@@
-205,11
+196,23
@@
def main(argv):
sys.stderr.write("Only a single player may be provided when --server is used\n")
return 1
if len(players) == 1:
sys.stderr.write("Only a single player may be provided when --server is used\n")
return 1
if len(players) == 1:
- return client(server_addr, players[0]
.name
)
+ return client(server_addr, players[0])
else:
return client(server_addr)
else:
return client(server_addr)
-
+ for i in xrange(len(players)):
+ p = make_player(players[i], colour)
+ if not isinstance(p, Player):
+ sys.stderr.write(sys.argv[0] + " : Fatal error creating " + colour + " player\n")
+ return 100
+ players[i] = p
+ if colour == "white":
+ colour = "black"
+ elif colour == "black":
+ pass
+ else:
+ sys.stderr.write(sys.argv[0] + " : Too many players (max 2)\n")
+
# Create the board
# Construct a GameThread! Make it global! Damn the consequences!
# Create the board
# Construct a GameThread! Make it global! Damn the consequences!
diff --git
a/qchess/src/network.py
b/qchess/src/network.py
index
b685037
..
a50a976
100644
(file)
--- a/
qchess/src/network.py
+++ b/
qchess/src/network.py
@@
-149,9
+149,11
@@
class Network():
if self.src in ready:
s = self.src.recv(1)
else:
if self.src in ready:
s = self.src.recv(1)
else:
- raise Exception("UNRESPONSIVE")
+ raise Exception("
NET_
UNRESPONSIVE")
+ debug("Network get_response s = " + str(s))
+
while s[len(s)-1] != '\n':
# Timeout on each character in the message
if network_timeout_delay > 0.0:
while s[len(s)-1] != '\n':
# Timeout on each character in the message
if network_timeout_delay > 0.0:
@@
-161,7
+163,7
@@
class Network():
if self.src in ready:
s += self.src.recv(1)
else:
if self.src in ready:
s += self.src.recv(1)
else:
- raise Exception("UNRESPONSIVE")
+ raise Exception("
NET_
UNRESPONSIVE")
return s.strip(" \r\n")
return s.strip(" \r\n")
@@
-175,7
+177,7
@@
class Network():
if self.src in ready:
self.src.send(s + "\n")
else:
if self.src in ready:
self.src.send(s + "\n")
else:
- raise Exception("UNRESPONSIVE")
+ raise Exception("
NET_
UNRESPONSIVE")
diff --git
a/qchess/src/player.py
b/qchess/src/player.py
index
37cca67
..
a574995
100644
(file)
--- a/
qchess/src/player.py
+++ b/
qchess/src/player.py
@@
-26,6
+26,8
@@
class Player():
def base_player(self):
return self
def base_player(self):
return self
+
+
@@
-97,6
+99,7
@@
class FifoPlayer(Player):
Player.__init__(self, name, colour)
os.mkfifo(self.name+".in")
os.mkfifo(self.name+".out")
Player.__init__(self, name, colour)
os.mkfifo(self.name+".in")
os.mkfifo(self.name+".out")
+
try:
self.fifo_out = open_fifo(self.name+".out","w", FifoPlayer.timeout)
try:
self.fifo_out = open_fifo(self.name+".out","w", FifoPlayer.timeout)
@@
-106,10
+109,7
@@
class FifoPlayer(Player):
self.fifo_out.write("START "+colour+"\n")
self.fifo_out.close()
self.fifo_out.write("START "+colour+"\n")
self.fifo_out.close()
-
-
-
-
+
def update(self, result):
sys.stderr.write("update fifo called\n")
try:
def update(self, result):
sys.stderr.write("update fifo called\n")
try:
@@
-155,15
+155,16
@@
class FifoPlayer(Player):
try:
self.fifo_out = open_fifo(self.name+".out", "w", FifoPlayer.timeout)
except:
try:
self.fifo_out = open_fifo(self.name+".out", "w", FifoPlayer.timeout)
except:
- os.remove(self.name+".in")
- os.remove(self.name+".out")
- #raise Exception("FIFO_TIMEOUT")
-
+ pass
else:
self.fifo_out.write(result + "\n")
self.fifo_out.close()
else:
self.fifo_out.write(result + "\n")
self.fifo_out.close()
+
+ try:
os.remove(self.name+".in")
os.remove(self.name+".out")
os.remove(self.name+".in")
os.remove(self.name+".out")
+ except OSError:
+ pass
# Player that runs from another process
class ExternalAgent(Player):
# Player that runs from another process
class ExternalAgent(Player):
@@
-171,6
+172,7
@@
class ExternalAgent(Player):
def __init__(self, name, colour):
Player.__init__(self, name, colour)
def __init__(self, name, colour):
Player.__init__(self, name, colour)
+ #raise Exception("waht")
self.p = subprocess.Popen(name,bufsize=0,stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True,universal_newlines=True)
self.send_message(colour)
self.p = subprocess.Popen(name,bufsize=0,stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True,universal_newlines=True)
self.send_message(colour)
@@
-252,6
+254,7
@@
class HumanPlayer(Player):
def __init__(self, name, colour):
Player.__init__(self, name, colour)
def __init__(self, name, colour):
Player.__init__(self, name, colour)
+
# Select your preferred account
def select(self):
if isinstance(graphics, GraphicsThread):
# Select your preferred account
def select(self):
if isinstance(graphics, GraphicsThread):
@@
-320,7
+323,8
@@
class InternalAgent(Player):
self.board = Board(style = "agent")
self.board = Board(style = "agent")
-
+ def argForm(self):
+ return "@internal:"+self.name
def update(self, result):
def update(self, result):
diff --git
a/qchess/src/server.py
b/qchess/src/server.py
index
5479997
..
ffd539a
100644
(file)
--- a/
qchess/src/server.py
+++ b/
qchess/src/server.py
@@
-62,13
+62,13
@@
def dedicated_server():
def client(addr, player="@human"):
def client(addr, player="@human"):
-
+ debug("Client " + player + " starts")
s = socket.socket()
s.connect((addr, 4562))
[colour,port] = s.recv(1024).strip(" \r\n").split(" ")
s = socket.socket()
s.connect((addr, 4562))
[colour,port] = s.recv(1024).strip(" \r\n").split(" ")
-
#
debug("Colour: " + colour + ", port: " + port)
+ debug("Colour: " + colour + ", port: " + port)
s.shutdown(socket.SHUT_RDWR)
s.close()
s.shutdown(socket.SHUT_RDWR)
s.close()
@@
-78,4
+78,4
@@
def client(addr, player="@human"):
else:
p = subprocess.Popen(["python", "qchess.py", "@network:"+addr+":"+port, player])
p.wait()
else:
p = subprocess.Popen(["python", "qchess.py", "@network:"+addr+":"+port, player])
p.wait()
- return 0
\ No newline at end of file
+ return 0
UCC
git Repository :: git.ucc.asn.au