def onDownloadRawData(self, evt): key = evt.attr1 path = evt.attr2 if not key: log.info('all requested data downloaded') self.log('All requested data downloaded') save_load.save_local_data() #local_data_path = config.options['data']['path'] #save_load.save_common_data(os.path.join(local_data_path, 'common') #sync_data_path = config.options['data']['sync_path'] #if sync_data_path: # save_load.save_common_data(os.path.join(sync_data_path), config.options['data']['sync_key']) self.map.update() return if not path: log.error('failed to load info for user %s'%(key,)) self.log('Error: failed to load info for user %s'%(key,)) return self.log('Downloaded %s %s'%(key, path)) user = import_xml.processRawData(path) if not user: #status_text = 'Not authorized' if status == import_raw.XmlHandler.StatusAuthError else 'Turn in progress' self.log('Error processing %s'%(key)) else: for login, acc in config.users.iteritems(): ll = unicode(login) kk = unicode(key) if ll == kk and not 'id' in acc: acc['id'] = int(user['user_id']) print 'got user id %s for user %s'%(acc['id'], login) config.users[login] = acc config.saveUsers() config.user_id_dict[acc['id']] = acc if 'name' in user and 'turn' in user: self.backup_xml(path, user) if 'request' in user and '1' == user['request']: self.process_performed_actions(user['user_id']) #if key in self.recv_data_callback: # func, user_id, data = self.recv_data_callback[key] # del self.recv_data_callback[key] # func(user_id, path) # db.clear_action_result(user_id) self.map.update() self.object_filter.update()
def startElement(self, name, attrs): if XmlHandler.NodeDC == name: self.user.update( getAttrs(attrs, {'user':'******', 'id':'id', 'turn-n':'turn'}) ) print 'loaded user %s'%(self.user,) if 'id' in self.user and 'turn' in self.user: self.storeArchive() if 'turn' in self.user: self.turn = int(self.user['turn']) db.db.set_turn(self.turn) print 'prepare turn %s'%(self.turn,) elif XmlHandler.Errors == name: log.error('Found errors node') self.errors = True elif XmlHandler.Error == name and self.errors: log.error('Found error node!') errid = int(attrs['id']) if errid == 10000: self.status = self.StatusAuthError log.error('Error id %s'%(attrs['id'],)) elif errid != 10025: self.status = self.StatusError log.error('Error id %s'%(attrs['id'],)) #elif XmlHandler.NotLoggedInError == name: # log.error('Not logged in - turn in progress') # self.status = self.StatusTurnInProgress elif XmlHandler.UserInfo == name: d = getAttrs(attrs, {'homeworldx':'hw_x', 'homeworldy':'hw_y', 'race-id':'race_id', 'login':"******"}) self.user.update( d ) print 'update user %s'%(self.user,) db.db.set_object('hw', {'hw_x':d['hw_x'], 'hw_y':d['hw_y'], 'player_id':self.user['id']}) user_obj = db.db.get_object(db.Db.USER, {'=':{'id':self.user['id']}}) if user_obj and int(user_obj['turn']) > self.turn: #should not normally happen ( unless you loading old xml files) pass db.db.set_object('user', {'id':self.user['id'], 'turn':self.turn, 'login':d['login'], 'race_id':d['race_id'], 'name':self.user['name']}) config.set_user_id(d['login'], self.user['id']) config.saveUsers() elif XmlHandler.UserRace == name: d = getAttrs(attrs, { 'race-id':'id', 't-delta':'temperature_delta', 't-optimal':'temperature_optimal', 'race-nature':'resource_nature', 'bonus-multiply':'population_growth', 'industry-nature': 'resource_main', 'unused-resource': 'resource_secondary', 'bonus-speed': 'modifier_fly', 'bonus-build-war': 'modifier_build_war', 'bonus-build-peace': 'modifier_build_peace', 'bonus-iq': 'modifier_science', #'bonus-surface': 'modifier_surface', 'bonus-stealth': 'modifier_stealth', 'bonus-detectors': 'modifier_detection', 'bonus-mining': 'modifier_mining', 'bonus-price': 'modifier_price', #'bonus-ground-units': 'modifier_build_ground', #'bonus-space-units': 'modifier_build_space', 'race-name':'name' }) db.db.set_object(db.Db.RACE, d) # race-nature (nature) # industry-nature ( first ) # unused-resource ( second ) # bonus-multiply ( population-growth # bonus-speed ( fly ? ) # bonus-build-war # bonus-build-peace # bonus-iq (tech) # bonus-surface (wtf) # bonus-stealth # bonus-detectors # bonus-mining # bonus-price # bonus-ground-units # bonus-space-units # bonus-attack # bonus-dr # bonus-hp # race-name elif XmlHandler.UserPlanets == name: self.read_level = XmlHandler.UserPlanets db.eraseObject(db.Db.PLANET, ['owner_id=%s'%(self.user['id'],),], self.turn) elif XmlHandler.KnownPlanets == name: db.eraseObject(db.Db.OPEN_PLANET, ['user_id=%s'%(self.user['id'],),]) elif XmlHandler.Planet == name: data = getAttrs(attrs, {'x':'x', 'owner-id':'owner_id', 'y':'y', 'name':'name','o':'o','e':'e','m':'m','t':'t','temperature':'t','s':'s','surface':'s', 'age':'age', 'open':'is_open'}) if XmlHandler.UserPlanets == self.read_level: data['owner_id'] = self.user['id'] db.db.set_object(db.Db.PLANET, data) data = getAttrs(attrs, {'x':'x', 'y':'y', 'population':'population', 'corruption':'corruption', 'open':'is_open'}) data['owner_id'] = self.user['id'] db.set_open_planet(get_coord(data), self.user['id']) db.db.set_object(db.Db.USER_PLANET, data) else: if 'is_open' in data and int(data['is_open']) == 1: db.set_open_planet(get_coord(data), self.user['id']) actual_turn = 0 if 'turn' in data: actual_turn = int(data['turn']) del data['turn'] if 'age' in data: actual_turn = self.turn - int(data['age']) del data['age'] db.db.smart_update_object(db.Db.PLANET, actual_turn, data) elif XmlHandler.Fleet == name: fleetDict = {'x':'x','y':'y','id':'id','in-transit':'in_transit','fleet-id':'id','player-id':'owner_id','from-x':'from_x','from-y':'from_y','name':'name', 'tta':'tta', 'turns-till-arrival':'tta', 'hidden':'is_hidden'} data = getAttrs(attrs, fleetDict) db.eraseObject(db.Db.UNIT, ['fleet_id=%s'%(fleetDict['id'],),], self.turn) #save fleet-id to fill unit table self.obj_id = data['id'] tta = 0 if 'tta' in data: tta = int(data['tta']) if tta > 0: data['arrival_turn'] = int(self.user['turn'])+tta del data['tta'] data['owner_id'] = self.user['id'] if tta>0: #data['turn'] = turn db.db.set_object(db.Db.FLYING_FLEET, data) elif 'in_transit' in data: safeRemove(data, ['from_x', 'from_y', 'tta', 'in_transit']) #data['turn'] = turn db.db.set_object(db.Db.FLEET, data) elif XmlHandler.AlienFleet == name: #TODO: alien fleet / flying or not here ( 1st delete all alien fleets visible by user before adding any of them fleetDict = {'x':'x','y':'y','fleet-id':'id','player-id':'owner_id','from-x':'from_x','from-y':'from_y','name':'name', 'tta':'tta', 'turns-till-arrival':'tta', 'hidden':'is_hidden'} data = getAttrs(attrs, fleetDict) #db.eraseObject(db.Db.ALIEN_UNIT, ['fleet_id=%s'%(fleetDict['id'],),], self.turn) tta = 0 if 'tta' in data: tta = int(data['tta']) del data['tta'] if tta > 0: data['arrival_turn'] = int(self.user['turn'])+tta data['user_id'] = self.user['id'] if 'owner_id' in data: print 'got owner of flying alient fleet: %s'%(data,) del data['owner_id'] self.obj_id = None #data['turn']=self.turn db.db.set_object(db.Db.FLYING_ALIEN_FLEET, data) else: safeRemove(data, ['from_x', 'from_y', 'tta']) #save fleet-id to fill alien-unit table self.obj_id = data['id'] db.setData(db.Db.FLEET, data, self.turn) elif XmlHandler.Garrison == name: self.pos = getAttrs(attrs, {'x':'x', 'y':'y'}) self.obj_id = None db.eraseObject(db.Db.GARRISON_QUEUE_UNIT, ['%s=%s'%(k,v) for k,v in self.pos.iteritems()], self.turn) #db.eraseObject(db.Db.GARRISON_UNIT, ['%s=%s'%(k,v) for k,v in self.pos.iteritems()], self.turn) elif XmlHandler.AlienUnit == name: if self.obj_id: data = getAttrs(attrs, {'class-id':'class', 'id':'id', 'weight':'weight', 'carapace':'carapace', 'color':'color'}) data['fleet_id'] = self.obj_id db.setData(db.Db.ALIEN_UNIT, data, self.turn) elif XmlHandler.Unit == name: data = getAttrs(attrs, {'bc':'class', 'id':'id', 'hp':'hp'}) if self.obj_id: data['fleet_id'] = self.obj_id db.setData('unit', data, self.turn) elif self.pos: data.update(self.pos) data['x'] = self.pos['x'] data['y'] = self.pos['y'] db.setData(db.Db.UNIT, data, self.turn) #db.setData('garrison_unit', data, self.turn) elif XmlHandler.BuildingClass == name: data = getAttrs(attrs, {'name':'name', 'description':'description', 'is-war':"is_war", 'support-second':"support_second", 'bomb-dr':"defence_bomb", 'transport-capacity':"transport_capacity", 'is-transportable':"is_transportable", 'bomb-number':"bomb_number", 'fly-range':"fly_range", 'bonus-m':"bonus_m", 'is-ground-unit':"is_ground_unit", 'weight':"weight", 'scan-strength':"scan_strength", 'laser-dr':"defence_laser", 'laser-ar':"aim_laser", 'serial':"is_serial", 'carapace':"carapace", 'bonus-surface':"bonus_s", 'laser-damage':"damage_laser", 'offensive':"is_offensive", 'is-building':"is_building", 'is-space-ship':"is_spaceship", 'build-speed':"build_speed", 'detect-range':"detect_range", 'maxcount':"max_count", 'class':"class", 'cost-main':"cost_main", 'stealth-lvl':"stealth_level", 'bonus-o':"bonus_o", 'requires-pepl':"require_people", 'bomb-damage':"damage_bomb", 'bomb-ar':"aim_bomb", 'cost-money':"cost_money", 'req-tehn-level':"require_tech_level", 'color':"color", 'fly-speed':"fly_speed", 'support-main':"support_main", 'building-id':"id", 'bonus-e':"bonus_e", 'carrier-capacity':"carrier_capacity", 'bonus-production':"bonus_production", 'laser-number':"laser_number", 'cost-pepl':"cost_people", 'cost-second':"cost_second", 'hit-points':"hp"}) data['owner_id'] = self.user['id'] self.parent_attrs = data db.setData('proto',data) #if 'name' in data: # #log.info('specific data: %s'%(data,)) elif XmlHandler.BuildingClassAction == name and self.parent_attrs: data = getAttrs(attrs, {'action':'type', 'maxcount':'max_count', 'cost-pepl':"cost_people", 'cost-main':"cost_main", 'cost-money':"cost_money", 'cost-second':"cost_second", 'planet-can-be':"planet_can_be"}) data['proto_id'] = self.parent_attrs['id'] data['proto_owner_id'] = self.user['id'] db.setData('proto_action',data) elif XmlHandler.Iframe == name: self.iframe = True elif XmlHandler.PerformAction == name and self.iframe: data = getAttrs(attrs, {'id':'id', 'result':'result', 'return-id':'return-id'}) print 'got attrs %s, data %s'%(attrs, data) act_id = int(data['id']) print 'got action id %s'%(act_id,) ret_id = 0 if 'return-id' in data: ret_id = data['return-id'] if 'result' in data and unicode(data['result'])==unicode('ok'): print 'final result ret-id %s'%(ret_id,) db.setData('requested_action', {'id':act_id, 'user_id':self.user['id'], 'return_id':ret_id, 'is_ok':1}) db.perform_pending_action(act_id, ret_id) #self.actions.append( (act_id, ret_id) ) elif XmlHandler.Diplomacy == name: self.dip = True elif XmlHandler.DipRelation == name and self.dip: data = getAttrs(attrs, {'player':'player_id', 'name':'name'}) db.setData(db.Db.PLAYER, data) dip_data = getAttrs(attrs, {'player':'player_id', 'type':'status'}) dip_data['owner_id'] = self.user['id'] db.setData(db.Db.DIP, dip_data) elif XmlHandler.UserFleets == name: db.eraseObject(db.Db.FLEET, ['owner_id=%s'%(self.user['id'],),], self.turn) db.eraseObject(db.Db.FLYING_FLEET, ['owner_id=%s'%(self.user['id'],),], self.turn) self.pos = None elif XmlHandler.AlienFleets == name: db.eraseObject(db.Db.FLYING_ALIEN_FLEET, ['user_id=%s'%(self.user['id'],)], self.turn) self.pos = None