def _get_user(self): (value, isId) = self.req['args'] orig_value = value reg = GAME_REGION if isId: value = str(int(value)) else: if reg == "CT": suf = value[-3:] if suf in ('_RU', '_EU', '_NA', '_US', '_SG'): reg = value[-2:] value = value[:-3] if reg == 'US': reg = 'NA' else: reg = "RU" cacheKey = "%s/%s" % ("ID" if isId else reg, value) data = None if cacheKey not in self.cacheUser: try: tdata = token.getXvmActiveTokenData() if tdata is None or 'token' not in tdata: err('No valid token for XVM network services (key=%s)' % cacheKey) else: tok = tdata['token'].encode('ascii') if isId: req = "user/%s/%s" % (tok, value) else: req = "nick/%s/%s/%s" % (tok, reg, value) server = XVM.SERVERS[randint(0, len(XVM.SERVERS) - 1)] (response, duration, errStr) = loadUrl(server, req) # log(response) if not response: # err('Empty response or parsing error') pass else: try: data = None if response in ('', '[]') else simplejson.loads(response)[0] except Exception: err(' Bad answer: ' + response) if data is not None: self._fix_user(data, None if isId else orig_value) if 'nm' in data and '_id' in data: self.cacheUser[reg + "/" + data['nm']] = data self.cacheUser["ID/" + str(data['_id'])] = data elif response == '[]': self.cacheUser[cacheKey] = {} except Exception: err(traceback.format_exc()) with self.lock: self.resp = self.cacheUser.get(cacheKey, {})
def _load_stat(self, playerVehicleID): requestList = [] replay = isReplay() all_cached = True for (vehId, pl) in self.players.iteritems(): cacheKey = "%d=%d" % (pl.playerId, pl.vId) if cacheKey not in self.cacheBattle: all_cached = False requestList.append("%d=%d%s" % (pl.playerId, pl.vId, '=1' if not replay and pl.vehId == playerVehicleID else '')) if all_cached or not requestList: return try: tdata = token.getXvmActiveTokenData() if token.networkServicesSettings['statBattle']: if tdata is None or 'token' not in tdata: err('No valid token for XVM network services (id=%s)' % playerVehicleID) return cmd = 'rplstat' if isReplay() else 'stat' updateRequest = '%s/%s/%s' % (cmd, tdata['token'].encode('ascii'), ','.join(requestList)) if XVM.SERVERS is None or len(XVM.SERVERS) <= 0: err('Cannot read data: no suitable server was found.') return server = XVM.SERVERS[randint(0, len(XVM.SERVERS) - 1)] (response, duration, errStr) = loadUrl(server, updateRequest) if not response: # err('Empty response or parsing error') return data = simplejson.loads(response) if 'players' not in data: err('Stat request failed: ' + str(response)) return else: if isReplay(): log('XVM network services inactive (id=%s)' % playerVehicleID) players = [] for (vehId, pl) in self.players.iteritems(): players.append(self._get_battle_stub(pl)) data = {'players': players} for stat in data['players']: # debug(simplejson.dumps(stat)) self._fix(stat) # pprint(stat) if 'nm' not in stat or not stat['nm']: continue if 'b' not in stat or stat['b'] <= 0: continue cacheKey = "%d=%d" % (stat['_id'], stat.get('v', {}).get('id', 0)) self.cacheBattle[cacheKey] = stat except Exception: err(traceback.format_exc())