X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=qchess%2Fsrc%2Flog.py;h=ec7e6eaed5e6034cc679a2e888f9b6d50dfbf2c7;hb=52068b63d49f02f4455a4415356ecfe38db72f59;hp=12b43b84be24077fa996e75ded53c771c86311ad;hpb=a238aa7acac990bae67644d1dc7f518ce3e2e8c6;p=progcomp2013.git diff --git a/qchess/src/log.py b/qchess/src/log.py index 12b43b8..ec7e6ea 100644 --- a/qchess/src/log.py +++ b/qchess/src/log.py @@ -1,10 +1,10 @@ -log_file = None +log_files = [] import datetime import urllib2 class LogFile(): - def __init__(self, log): - + def __init__(self, log, name): + self.name = name self.log = log self.logged = [] self.log.write("# Log starts " + str(datetime.datetime.now()) + "\n") @@ -17,7 +17,7 @@ class LogFile(): def setup(self, board, players): for p in players: - self.log.write("# " + p.colour + " : " + p.name + "\n") + self.log.write("# " + str(p.colour) + " : " + str(p.name) + "\n") self.log.write("# Initial board\n") for x in range(0, w): @@ -29,11 +29,16 @@ class LogFile(): def close(self): self.log.write("# EOF\n") - self.log.close() + if self.log != sys.stdout: + self.log.close() -class HttpLog(LogFile): +class ShortLog(LogFile): def __init__(self, file_name): - LogFile.__init__(self, open(file_name, "w", 0)) + if file_name == "": + self.log = sys.stdout + else: + self.log = open(file_name, "w", 0) + LogFile.__init__(self, self.log, "@"+file_name) self.file_name = file_name self.phase = 0 @@ -42,8 +47,9 @@ class HttpLog(LogFile): self.logged.append((now, s)) if self.phase == 0: - self.log.close() - self.log = open(self.file_name, "w", 0) + if self.log != sys.stdout: + self.log.close() + self.log = open(self.file_name, "w", 0) self.log.write("# Short log updated " + str(datetime.datetime.now()) + "\n") LogFile.setup(self, game.board, game.players) @@ -54,8 +60,12 @@ class HttpLog(LogFile): self.phase = (self.phase + 1) % 2 def close(self): + if self.phase == 1: + ending = self.logged[len(self.logged)-1] + self.log.write(str(ending[0]) + " : " + ending[1] + "\n") self.log.write("# EOF\n") - self.log.close() + if self.log != sys.stdout: + self.log.close() class HeadRequest(urllib2.Request): @@ -121,13 +131,53 @@ class HttpReplay(): def close(self): self.getter.stop() + +class FileReplay(): + def __init__(self, filename): + self.f = open(filename, "r", 0) + self.filename = filename + self.mod = os.path.getmtime(filename) + self.count = 0 + + def readline(self): + line = self.f.readline() + + while line == "": + mod2 = os.path.getmtime(self.filename) + if mod2 > self.mod: + #sys.stderr.write("File changed!\n") + self.mod = mod2 + self.f.close() + self.f = open(self.filename, "r", 0) + + new_line = self.f.readline() + + if " ".join(new_line.split(" ")[0:3]) != "# Short log": + for i in range(self.count): + new_line = self.f.readline() + #sys.stderr.write("Read back " + str(i) + ": " + str(new_line) + "\n") + new_line = self.f.readline() + else: + self.count = 0 + + line = new_line + + self.count += 1 + return line + + def close(self): + self.f.close() + def log(s): - if log_file != None: - log_file.write(s) + for l in log_files: + l.write(s) + +def debug(s): + sys.stderr.write("# DEBUG: " + s + "\n") def log_init(board, players): - if log_file != None: - log_file.setup(board, players) + for l in log_files: + l.setup(board, players)