6 def __init__(self, log):
10 self.log.write("# Log starts " + str(datetime.datetime.now()) + "\n")
13 now = datetime.datetime.now()
14 self.log.write(str(now) + " : " + s + "\n")
15 self.logged.append((now, s))
17 def setup(self, board, players):
20 self.log.write("# " + str(p.colour) + " : " + str(p.name) + "\n")
22 self.log.write("# Initial board\n")
25 if board.grid[x][y] != None:
26 self.log.write(str(board.grid[x][y]) + "\n")
28 self.log.write("# Start game\n")
31 self.log.write("# EOF\n")
32 if self.log != sys.stdout:
35 class ShortLog(LogFile):
36 def __init__(self, file_name):
40 self.log = open(file_name, "w", 0)
41 LogFile.__init__(self, self.log)
42 self.file_name = file_name
46 now = datetime.datetime.now()
47 self.logged.append((now, s))
50 if self.log != sys.stdout:
52 self.log = open(self.file_name, "w", 0)
53 self.log.write("# Short log updated " + str(datetime.datetime.now()) + "\n")
54 LogFile.setup(self, game.board, game.players)
57 for message in self.logged[len(self.logged)-2:]:
58 self.log.write(str(message[0]) + " : " + message[1] + "\n")
60 self.phase = (self.phase + 1) % 2
64 ending = self.logged[len(self.logged)-1]
65 self.log.write(str(ending[0]) + " : " + ending[1] + "\n")
66 self.log.write("# EOF\n")
67 if self.log != sys.stdout:
71 class HeadRequest(urllib2.Request):
75 class HttpGetter(StoppableThread):
76 def __init__(self, address):
77 StoppableThread.__init__(self)
78 self.address = address
79 self.log = urllib2.urlopen(address)
81 self.lock = threading.RLock() #lock for access of self.state
82 self.cond = threading.Condition() # conditional
85 while not self.stopped():
86 line = self.log.readline()
88 date_mod = datetime.datetime.strptime(self.log.headers['last-modified'], "%a, %d %b %Y %H:%M:%S GMT")
91 next_log = urllib2.urlopen(HeadRequest(self.address))
92 date_new = datetime.datetime.strptime(next_log.headers['last-modified'], "%a, %d %b %Y %H:%M:%S GMT")
93 while date_new <= date_mod and not self.stopped():
94 next_log = urllib2.urlopen(HeadRequest(self.address))
95 date_new = datetime.datetime.strptime(next_log.headers['last-modified'], "%a, %d %b %Y %H:%M:%S GMT")
99 self.log = urllib2.urlopen(self.address)
100 line = self.log.readline()
103 self.lines.append(line)
104 self.cond.notifyAll()
107 #sys.stderr.write(" HttpGetter got \'" + str(line) + "\'\n")
116 def __init__(self, address):
117 self.getter = HttpGetter(address)
121 self.getter.cond.acquire()
122 while len(self.getter.lines) == 0:
123 self.getter.cond.wait()
125 result = self.getter.lines[0]
126 self.getter.lines = self.getter.lines[1:]
127 self.getter.cond.release()
136 def __init__(self, filename):
137 self.f = open(filename, "r", 0)
138 self.filename = filename
139 self.mod = os.path.getmtime(filename)
143 line = self.f.readline()
146 mod2 = os.path.getmtime(self.filename)
148 #sys.stderr.write("File changed!\n")
151 self.f = open(self.filename, "r", 0)
153 new_line = self.f.readline()
155 if " ".join(new_line.split(" ")[0:3]) != "# Short log":
156 for i in range(self.count):
157 new_line = self.f.readline()
158 #sys.stderr.write("Read back " + str(i) + ": " + str(new_line) + "\n")
159 new_line = self.f.readline()
177 sys.stderr.write("# DEBUG: " + s + "\n")
180 def log_init(board, players):
182 l.setup(board, players)