-log_file = None
+log_files = []
import datetime
import urllib2
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)
self.file_name = file_name
self.phase = 0
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)
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):
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 log_init(board, players):
- if log_file != None:
- log_file.setup(board, players)
+ for l in log_files:
+ l.setup(board, players)