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("# " + p.colour + " : " + 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")
34 class HttpLog(LogFile):
35 def __init__(self, file_name):
36 LogFile.__init__(self, open(file_name, "w", 0))
37 self.file_name = file_name
41 now = datetime.datetime.now()
42 self.logged.append((now, s))
46 self.log = open(self.file_name, "w", 0)
47 self.log.write("# Short log updated " + str(datetime.datetime.now()) + "\n")
48 LogFile.setup(self, game.board, game.players)
51 for message in self.logged[len(self.logged)-2:]:
52 self.log.write(str(message[0]) + " : " + message[1] + "\n")
54 self.phase = (self.phase + 1) % 2
57 self.log.write("# EOF\n")
61 class HeadRequest(urllib2.Request):
65 class HttpGetter(StoppableThread):
66 def __init__(self, address):
67 StoppableThread.__init__(self)
68 self.address = address
69 self.log = urllib2.urlopen(address)
71 self.lock = threading.RLock() #lock for access of self.state
72 self.cond = threading.Condition() # conditional
75 while not self.stopped():
76 line = self.log.readline()
78 date_mod = datetime.datetime.strptime(self.log.headers['last-modified'], "%a, %d %b %Y %H:%M:%S GMT")
81 next_log = urllib2.urlopen(HeadRequest(self.address))
82 date_new = datetime.datetime.strptime(next_log.headers['last-modified'], "%a, %d %b %Y %H:%M:%S GMT")
83 while date_new <= date_mod and not self.stopped():
84 next_log = urllib2.urlopen(HeadRequest(self.address))
85 date_new = datetime.datetime.strptime(next_log.headers['last-modified'], "%a, %d %b %Y %H:%M:%S GMT")
89 self.log = urllib2.urlopen(self.address)
90 line = self.log.readline()
93 self.lines.append(line)
97 #sys.stderr.write(" HttpGetter got \'" + str(line) + "\'\n")
106 def __init__(self, address):
107 self.getter = HttpGetter(address)
111 self.getter.cond.acquire()
112 while len(self.getter.lines) == 0:
113 self.getter.cond.wait()
115 result = self.getter.lines[0]
116 self.getter.lines = self.getter.lines[1:]
117 self.getter.cond.release()
130 def log_init(board, players):
132 log_file.setup(board, players)