def base_player(self):
return self
+
+
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()
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():
raise Exception("FIFO_TIMEOUT")
else:
w.join()
+ if w.exception != None:
+ raise w.exception
return w.result
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)
+ except:
+ raise Exception("FIFO_TIMEOUT")
+ else:
+ self.fifo_out.write("START "+colour+"\n")
+ self.fifo_out.close()
+
+
def update(self, result):
sys.stderr.write("update fifo called\n")
try:
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()
+
+ try:
os.remove(self.name+".in")
os.remove(self.name+".out")
+ except OSError:
+ pass
# Player that runs from another process
class ExternalAgent(Player):
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)
def __init__(self, name, colour):
Player.__init__(self, name, colour)
+
# Select your preferred account
def select(self):
if isinstance(graphics, GraphicsThread):
sys.stdout.write("SELECTION?\n")
try:
p = map(int, sys.stdin.readline().strip("\r\n ").split(" "))
+ return p
except:
sys.stderr.write("ILLEGAL GIBBERISH\n")
continue
+
# It's your move captain
def get_move(self):
if isinstance(graphics, GraphicsThread):
sys.stdout.write("MOVE?\n")
try:
p = map(int, sys.stdin.readline().strip("\r\n ").split(" "))
+ return p
except:
sys.stderr.write("ILLEGAL GIBBERISH\n")
continue
self.board = Board(style = "agent")
-
+ def argForm(self):
+ return "@internal:"+self.name
def update(self, result):