7451b3aefff6e9b2b61077e3eb98b5fdecf98a68
[progcomp2013.git] / qchess / src / log.py
1 log_file = None
2 import datetime
3 import urllib2
4
5 class LogFile():
6         def __init__(self, log):        
7                 
8                 self.log = log
9                 self.logged = []
10
11         def write(self, s):
12                 now = datetime.datetime.now()
13                 self.log.write(str(now) + " : " + s + "\n")
14                 self.logged.append((now, s))
15
16         def setup(self, board, players):
17                 self.log.write("# Log starts " + str(datetime.datetime.now()) + "\n")
18                 for p in players:
19                         self.log.write("# " + p.colour + " : " + p.name + "\n")
20                 
21                 self.log.write("# Initial board\n")
22                 for x in range(0, w):
23                         for y in range(0, h):
24                                 if board.grid[x][y] != None:
25                                         self.log.write(str(board.grid[x][y]) + "\n")
26
27                 self.log.write("# Start game\n")
28
29         def close(self):
30                 self.log.write("# EOF\n")
31                 self.log.close()
32
33 class HttpLog(LogFile):
34         def __init__(self, file_name):
35                 LogFile.__init__(self, open(file_name, "w", 0))
36                 self.file_name = file_name
37                 self.phase = 0
38
39         def write(self, s):
40                 now = datetime.datetime.now()
41                 self.logged.append((now, s))
42                 
43                 if self.phase == 0:
44                         self.log.close()
45                         self.log = open(self.file_name, "w", 0)
46                         LogFile.setup(self, game.board, game.players)
47
48                 elif self.phase == 1:
49                         for message in self.logged[len(self.logged)-2:]:
50                                 self.log.write(str(message[0]) + " : " + message[1] + "\n")
51
52                 self.phase = (self.phase + 1) % 2               
53                 
54         def close(self):
55                 self.log.write("# EOF\n")
56                 self.log.close()
57                 
58
59 class HeadRequest(urllib2.Request):
60         def get_method(self):
61                 return "HEAD"
62                 
63 class HttpReplay():
64         def __init__(self, address):
65                 self.read_setup = False
66                 self.log = urllib2.urlopen(address)
67                 self.address = address
68
69         def readline(self):
70                 
71                 line = self.log.readline()
72                 sys.stderr.write(sys.argv[0] + " : " + str(self.__class__.__name__) + " read \""+str(line.strip("\r\n")) + "\" from address " + str(self.address) + "\n")
73                 if line == "":
74                         sys.stderr.write(sys.argv[0] + " : " + str(self.__class__.__name__) + " retrieving from address " + str(self.address) + "\n")
75                         date_mod = datetime.datetime.strptime(self.log.headers['last-modified'], "%a, %d %b %Y %H:%M:%S GMT")
76                         self.log.close()
77
78                         next_log = urllib2.urlopen(HeadRequest(self.address))
79                         date_new = datetime.datetime.strptime(next_log.headers['last-modified'], "%a, %d %b %Y %H:%M:%S GMT")
80                         while date_new <= date_mod:
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
84                         self.log = urllib2.urlopen(self.address)
85                         game.setup()
86                         line = self.log.readline()
87
88
89                 return line
90                         
91         def close(self):
92                 self.log.close()
93                                                 
94 def log(s):
95         if log_file != None:
96                 log_file.write(s)
97                 
98
99 def log_init(board, players):
100         if log_file != None:
101                 log_file.setup(board, players)
102

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