Did something, apparently
[progcomp2013.git] / qchess / src / log.py
index 12b43b8..36e243f 100644 (file)
@@ -1,4 +1,4 @@
-log_file = None
+log_files = []
 import datetime
 import urllib2
 
@@ -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)
                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)
 

UCC git Repository :: git.ucc.asn.au