X-Git-Url: https://git.ucc.asn.au/?p=progcomp2013.git;a=blobdiff_plain;f=qchess%2Fqchess.py;h=32e2c60df459f6f702996f1633c71fb7a720360e;hp=02a724ab2ea05a25dce5ea6e31d748c0a8d42f64;hb=6857a85bd7dc426f0b864780596435555bef3f11;hpb=a35e4dc5f4fb6325785b6f8b123266976107b748 diff --git a/qchess/qchess.py b/qchess/qchess.py index 02a724a..32e2c60 100755 --- a/qchess/qchess.py +++ b/qchess/qchess.py @@ -1199,29 +1199,93 @@ class StoppableThread(threading.Thread): def stopped(self): return self._stop.isSet() # --- thread_util.py --- # - - log_file = None +import datetime +import urllib2 -def log(s): - if log_file != None: - import datetime - log_file.write(str(datetime.datetime.now()) + " : " + s + "\n") +class LogFile(): + def __init__(self, file_name): + + self.log = open(file_name, "w", 0) -def log_init(board, players): - if log_file != None: - import datetime - log_file.write("# Log starts " + str(datetime.datetime.now()) + "\n") + def write(self, s): + self.log.write(str(datetime.datetime.now()) + " : " + s + "\n") + + def setup(self, board, players): + self.log.write("# Log starts " + str(datetime.datetime.now()) + "\n") for p in players: - log_file.write("# " + p.colour + " : " + p.name + "\n") + self.log.write("# " + p.colour + " : " + p.name + "\n") - log_file.write("# Initial board\n") + self.log.write("# Initial board\n") for x in range(0, w): for y in range(0, h): if board.grid[x][y] != None: - log_file.write(str(board.grid[x][y]) + "\n") + self.log.write(str(board.grid[x][y]) + "\n") + + self.log.write("# Start game\n") + +class HttpLog(LogFile): + def __init__(self, file_name): + LogFile.__init__(self, file_name) + self.file_name = file_name + + def write(self, s): + self.log.close() + self.log = open(self.file_name, "w", 0) + + LogFile.setup(self, game.board, game.players) + + LogFile.write(self, s) + + +class HeadRequest(urllib2.Request): + def get_method(self): + return "HEAD" + +class HttpReplay(): + def __init__(self, address): + self.read_setup = False + self.log = urllib2.urlopen(address) + self.address = address + + def readline(self): + + line = self.log.readline() + sys.stderr.write(sys.argv[0] + " : " + str(self.__class__.__name__) + " read \""+str(line.strip("\r\n")) + "\" from address " + str(self.address) + "\n") + if line == "": + sys.stderr.write(sys.argv[0] + " : " + str(self.__class__.__name__) + " retrieving from address " + str(self.address) + "\n") + date_mod = datetime.datetime.strptime(self.log.headers['last-modified'], "%a, %d %b %Y %H:%M:%S GMT") + self.log.close() + + next_log = urllib2.urlopen(HeadRequest(self.address)) + date_new = datetime.datetime.strptime(next_log.headers['last-modified'], "%a, %d %b %Y %H:%M:%S GMT") + while date_new <= date_mod: + next_log = urllib2.urlopen(HeadRequest(self.address)) + date_new = datetime.datetime.strptime(next_log.headers['last-modified'], "%a, %d %b %Y %H:%M:%S GMT") + + self.log = urllib2.urlopen(self.address) + game.setup() + line = self.log.readline() + + + return line + + def close(self): + self.log.close() + +def log(s): + if log_file != None: + log_file.write(s) + + +def log_init(board, players): + if log_file != None: + log_file.setup(board, players) + +# --- log.py --- # + + - log_file.write("# Start game\n") # A thread that runs the game @@ -1356,7 +1420,11 @@ class ReplayThread(GameThread): self.line_number = 0 self.end = end - try: + self.setup() + + def setup(self): + sys.stderr.write("setup called for ReplayThread\n") + if True: while self.src.readline().strip(" \r\n") != "# Initial board": self.line_number += 1 @@ -1381,8 +1449,8 @@ class ReplayThread(GameThread): line = self.src.readline().strip(" \r\n") - except Exception, e: - raise Exception("FILE line: " + str(self.line_number) + " \""+str(line)+"\"") #\n" + e.message) + #except Exception, e: + # raise Exception("FILE line: " + str(self.line_number) + " \""+str(line)+"\"") #\n" + e.message) def run(self): i = 0 @@ -1390,6 +1458,7 @@ class ReplayThread(GameThread): count = 0 line = self.src.readline().strip(" \r\n") while line != "# EOF": + sys.stderr.write(sys.argv[0] + " : " + str(self.__class__.__name__) + " read: " + str(line) + "\n") count += 1 if self.max_lines != None and count > self.max_lines: self.stop() @@ -1402,15 +1471,18 @@ class ReplayThread(GameThread): line = line.split(":") result = line[len(line)-1].strip(" \r\n") - log(result) + try: self.board.update(result) - except: + except Exception, e: + sys.stderr.write("Exception! " + str(e.message) + "\n") self.final_result = result self.stop() break + log(result) + [x,y] = map(int, result.split(" ")[0:2]) target = self.board.grid[x][y] @@ -1446,9 +1518,11 @@ class ReplayThread(GameThread): phase = (phase + 1) % 2 if phase == 0: i = (i + 1) % 2 - + line = self.src.readline().strip(" \r\n") + sys.stderr.write(sys.argv[0] + " : " + str(self.__class__.__name__) + " finished...\n") + if self.max_lines != None and self.max_lines > count: sys.stderr.write(sys.argv[0] + " : Replaying from file; stopping at last line (" + str(count) + ")\n") sys.stderr.write(sys.argv[0] + " : (You requested line " + str(self.max_lines) + ")\n") @@ -1470,7 +1544,10 @@ def opponent(colour): else: return "white" # --- game.py --- # -import pygame +try: + import pygame +except: + pass import os # Dictionary that stores the unicode character representations of the different pieces @@ -1552,7 +1629,7 @@ class GraphicsThread(StoppableThread): #print "Test font" pygame.font.Font(os.path.join(os.path.curdir, "data", "DejaVuSans.ttf"), 32).render("Hello", True,(0,0,0)) - #create_images(grid_sz) + #load_images() create_images(grid_sz) """ @@ -2079,17 +2156,25 @@ def main(argv): if len(arg[2:].split("=")) == 1: src_file = sys.stdin else: - src_file = open(arg[2:].split("=")[1].split(":")[0]) + f = arg[2:].split("=")[1] + if f[0] == '@': + src_file = HttpReplay("http://" + f.split(":")[0][1:]) + else: + src_file = open(f.split(":")[0], "r", 0) - if len(arg[2:].split(":")) == 2: - max_lines = int(arg[2:].split(":")[1]) + if len(f.split(":")) == 2: + max_lines = int(f.split(":")[1]) elif (arg[1] == '-' and arg[2:].split("=")[0] == "log"): # Log file if len(arg[2:].split("=")) == 1: log_file = sys.stdout else: - log_file = open(arg[2:].split("=")[1], "w") + f = arg[2:].split("=")[1] + if f[0] == '@': + log_file = HttpLog(f[1:]) + else: + log_file = LogFile(f) elif (arg[1] == '-' and arg[2:].split("=")[0] == "delay"): # Delay if len(arg[2:].split("=")) == 1: @@ -2245,4 +2330,4 @@ if __name__ == "__main__": sys.exit(102) # --- main.py --- # -# EOF - created from make on Wed Jan 30 00:45:46 WST 2013 +# EOF - created from make on Wed Jan 30 17:20:26 WST 2013