mirror of
https://github.com/barronwaffles/dwc_network_server_emulator.git
synced 2026-09-28 21:07:42 -05:00
Implement getpd
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user