Implement getpd

This commit is contained in:
polaris
2014-05-15 14:56:41 -04:00
parent ec4d2d18a9
commit 0e0d4bebe5
3 changed files with 32 additions and 18 deletions

View File

@@ -341,7 +341,7 @@ class GamespyDatabase(object):
self.delete_session(profileid)
# Create new session
session_key = self.generate_session_key(9)
session_key = self.generate_session_key(8)
q ="INSERT INTO sessions VALUES (?, ?)"
q2 = q.replace("?", "%s") % (session_key, profileid)
@@ -570,22 +570,16 @@ class GamespyDatabase(object):
c.execute(q, [data, profileid, dindex, ptype])
self.conn.commit()
def pd_get(self, profileid, dindex, ptype, data):
def pd_get(self, profileid, dindex, ptype):
q = "SELECT * FROM gamestat_profile WHERE profileid = ? AND dindex = ? AND ptype = ?"
q2 = q.replace("?", "%s") % (profileid, dindex, ptype)
logger.log(-1, q2)
# c = self.conn.cursor()
# c.execute(q, [profileid, dindex, ptype])
#
# r = self.get_dict(c.fetchone())
c = self.conn.cursor()
c.execute(q, [profileid, dindex, ptype])
# Eventually data will contain a list of fields that are being requested.
# Just return nothing for now.
data = ""
#if 'data' in r:
# data = r['data']
r = self.get_dict(c.fetchone())
# c.close()
c.close()
return data
return r

View File

@@ -273,21 +273,39 @@ class Gamestats(LineReceiver):
self.db.pd_insert(self.profileid, data_parsed['dindex'], data_parsed['ptype'], data)
def perform_getpd(self, data_parsed):
logger.log(logging.DEBUG, "FIXME: Implement getpd: %s" % data_parsed)
profile = self.db.pd_get(self.profileid, data_parsed['dindex'], data_parsed['ptype'])
# Return all of the data regardless of whatever the parameters passed to the function are.
# I'll properly implement this once I get a real example of it in action.
data = self.db.pd_get(self.profileid, data_parsed['dindex'], data_parsed['ptype'])
data = ""
keys = data_parsed['keys'].split('\x01')
profile_data = gs_query.parse_gamespy_message("\\prof\\" + profile['data'] + "\\final\\")
if profile_data != None:
profile_data = profile_data[0][0]
for key in keys:
if key != "__cmd__" and key != "__cmd_val__" and key != "":
data += "\\"
data += key
data += "\\"
if key in profile_data:
data += profile_data[key]
modified = int(time.time())
msg_d = []
msg_d.append(('__cmd__', "getpdr"))
msg_d.append(('__cmd_val__', 1))
msg_d.append(('lid', self.lid))
msg_d.append(('pid', self.profileid))
msg_d.append(('mod', modified))
msg_d.append(('length', len(data)))
msg_d.append(('data', data))
msg = gs_query.create_gamespy_message(msg_d)
self.log(logging.DEBUG, "SENDING: '%s'..." % msg)
def perform_newgame(self, data_parsed):
# No op

View File

@@ -248,7 +248,9 @@ class GameSpyQRServer(object):
self.server_manager.update_server_list(k['gamename'] , session_id, k, self.sessions[session_id].console)
elif k['statechanged'] == "2": # Close server
self.server_manager.delete_server(k['gamename'] , session_id)
#self.sessions.pop(session_id)
if session_id in self.sessions:
self.sessions.pop(session_id)
elif recv_data[0] == '\x04': # Add Error