コード例 #1
0
ファイル: main_frame.py プロジェクト: bogolt/dclord
	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()
コード例 #2
0
ファイル: import_raw.py プロジェクト: bogolt/dclord
	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