Begin adding arogue5 support to the recorder script.
rlgalldb.py's arogue5 object is a nonfunctional stub, but at least it doesn't crash and the other games still work.
This commit is contained in:
parent
d29446fded
commit
34585136ed
1 changed files with 79 additions and 54 deletions
133
py/rlgalldb.py
133
py/rlgalldb.py
|
|
@ -143,34 +143,9 @@ def printTable(entries, fields, of):
|
|||
of.write(tblend)
|
||||
return
|
||||
|
||||
def readentries(entfile, entlist):
|
||||
"Reads a list of entries from a file object"
|
||||
while True:
|
||||
nextentry = entfile.readline()
|
||||
if not nextentry:
|
||||
break
|
||||
if nextentry[-1] != '\n': # The line is incomplete
|
||||
break
|
||||
entlist.append(nextentry.split(None, 4))
|
||||
return
|
||||
|
||||
class Game:
|
||||
pass
|
||||
|
||||
class RogueGame(Game):
|
||||
def __init__(self, name, uname, suffix):
|
||||
self.name = name
|
||||
self.uname = uname
|
||||
self.scores = logdir + uname + ".log"
|
||||
self.logspec = ["endt", "score", "name", "xl", "fate"]
|
||||
self.sqltypes = {"endt": "timestamptz", "score": "int",
|
||||
"name": "varchar(20)", "xl": "int", "fate": "text",
|
||||
"ttyrecs": "text ARRAY", "startt": "timestamptz"}
|
||||
self.logdelim = " "
|
||||
# Class variables, used by some methods
|
||||
fields = ["name", "score", "xl", "fate", "endt"]
|
||||
rankfields = ["rank", "score", "name", "xl", "fate", "endt"]
|
||||
pfields = ["score", "xl", "fate", "endt"]
|
||||
def __init__(self, name, uname):
|
||||
pass
|
||||
def logtoDict(self, entry):
|
||||
"Processes a log entry string, returning a dict."
|
||||
ndict = {"game": self}
|
||||
|
|
@ -178,6 +153,8 @@ class RogueGame(Game):
|
|||
for item, value in zip(self.logspec, entrylist):
|
||||
if self.sqltypes[item] == "int":
|
||||
ndict[item] = int(value)
|
||||
if self.sqltypes[item] == "bool":
|
||||
ndict[item] = bool(int(value))
|
||||
elif self.sqltypes[item] == "timestamptz":
|
||||
ndict[item] = datetime.fromtimestamp(int(value), utc)
|
||||
else:
|
||||
|
|
@ -194,6 +171,49 @@ class RogueGame(Game):
|
|||
break
|
||||
entlist.append(self.logtoDict(nextentry))
|
||||
return
|
||||
# TODO how does this work with postprocess?
|
||||
def loadnew(self):
|
||||
conn = getconn()
|
||||
if conn == None:
|
||||
return []
|
||||
cur = conn.cursor()
|
||||
# Get the previous offset
|
||||
cur.execute(offselstr, [self.uname])
|
||||
offset = cur.fetchone()[0]
|
||||
newlist = []
|
||||
try:
|
||||
scr = open(self.scores)
|
||||
scr.seek(offset)
|
||||
self.getEntryDicts(scr, newlist)
|
||||
except IOError:
|
||||
noffset = offset # Can't read anything, assume no new games
|
||||
else:
|
||||
noffset = scr.tell()
|
||||
scr.close()
|
||||
cur.execute(newoffstr, [noffset, self.uname])
|
||||
# The new players must already be added to the players table.
|
||||
updatenames = set([ e["name"] for e in newlist ])
|
||||
self.postprocess(newlist)
|
||||
self.putIntoDB(newlist, conn)
|
||||
cur.close()
|
||||
conn.close()
|
||||
return updatenames
|
||||
# End Game class definition
|
||||
|
||||
class RogueGame(Game):
|
||||
def __init__(self, name, uname, suffix):
|
||||
self.name = name
|
||||
self.uname = uname
|
||||
self.scores = logdir + uname + ".log"
|
||||
self.logspec = ["endt", "score", "name", "xl", "fate"]
|
||||
self.sqltypes = {"endt": "timestamptz", "score": "int",
|
||||
"name": "varchar(20)", "xl": "int", "fate": "text",
|
||||
"ttyrecs": "text ARRAY", "startt": "timestamptz"}
|
||||
self.logdelim = " "
|
||||
# Class variables, used by some methods
|
||||
fields = ["name", "score", "xl", "fate", "endt"]
|
||||
rankfields = ["rank", "score", "name", "xl", "fate", "endt"]
|
||||
pfields = ["score", "xl", "fate", "endt"]
|
||||
def getRecent(self, n=20):
|
||||
"Gets the n most recent games out of the database, returning a list \
|
||||
of dicts."
|
||||
|
|
@ -325,40 +345,45 @@ class RogueGame(Game):
|
|||
itsEntries[i]["ttyrecs"] = recs
|
||||
cur.close()
|
||||
conn.close()
|
||||
def loadnew(self):
|
||||
conn = getconn()
|
||||
if conn == None:
|
||||
return []
|
||||
cur = conn.cursor()
|
||||
# Get the previous offset
|
||||
cur.execute(offselstr, [self.uname])
|
||||
offset = cur.fetchone()[0]
|
||||
newlist = []
|
||||
try:
|
||||
scr = open(self.scores)
|
||||
scr.seek(offset)
|
||||
self.getEntryDicts(scr, newlist)
|
||||
except IOError:
|
||||
noffset = offset # Can't read anything, assume no new games
|
||||
else:
|
||||
noffset = scr.tell()
|
||||
scr.close()
|
||||
cur.execute(newoffstr, [noffset, self.uname])
|
||||
# The new players must already be added to the players table.
|
||||
updatenames = set([ e["name"] for e in newlist ])
|
||||
self.postprocess(newlist)
|
||||
self.putIntoDB(newlist, conn)
|
||||
cur.close()
|
||||
conn.close()
|
||||
return updatenames
|
||||
# End RogueGame class definition
|
||||
|
||||
class ARogueGame(Game):
|
||||
def __init__(self, name, uname, suffix):
|
||||
self.name = name
|
||||
self.uname = uname
|
||||
self.scores = logdir + uname + ".log"
|
||||
self.logspec = ["endt", "score", "name", "xl", "class", "depth",
|
||||
"maxdepth", "quest", "hadquest", "fate"]
|
||||
self.sqltypes = {"endt": "timestamptz", "score": "int",
|
||||
"name": "varchar(20)", "xl": "int", "class": "text", "depth": "int",
|
||||
"maxdepth": "int", "quest": "int", "hadquest": "bool",
|
||||
"fate": "text", "ttyrecs": "text ARRAY", "startt": "timestamptz"}
|
||||
self.logdelim = " "
|
||||
# Class variables
|
||||
fields = ["name", "score", "class", "xl", "fate", "endt"]
|
||||
rankfields = ["rank", "score", "name", "class", "xl", "fate", "endt"]
|
||||
pfields = ["score", "class", "xl", "fate", "endt"]
|
||||
def postprocess(self, gamelist):
|
||||
"Not Implemented"
|
||||
return
|
||||
def putIntoDB(self, dictlist, conn):
|
||||
"Not Implemented"
|
||||
conn.commit()
|
||||
return
|
||||
def getHigh(self, n=10, offset=0):
|
||||
return []
|
||||
def getRecent(self, n=20):
|
||||
return []
|
||||
def getPlayer(self, player):
|
||||
return []
|
||||
|
||||
rogue3 = RogueGame("Rogue V3", "rogue3", "r3")
|
||||
rogue4 = RogueGame("Rogue V4", "rogue4", "r4")
|
||||
rogue5 = RogueGame("Rogue V5", "rogue5", "r5")
|
||||
srogue = RogueGame("Super-Rogue", "srogue", "sr")
|
||||
arogue5 = ARogueGame("Advanced Rogue 5", "arogue5", "ar5")
|
||||
|
||||
gamelist = [rogue3, rogue4, rogue5, srogue]
|
||||
gamelist = [rogue3, rogue4, rogue5, srogue, arogue5]
|
||||
|
||||
def playerpage(pname):
|
||||
"Generate a player's HTML page"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue