def get(self): user = users.get_current_user() r = FlowerbedAdd() if self.request.get('lat') and self.request.get('lon'): #TODO: check if flowerbed is far enough from others #TODO: check if flowerbed is close enough to user lat = int(self.request.get('lat')) / 1000000.0 lon = int(self.request.get('lon')) / 1000000.0 gamer_key = Key.from_path(kloombaDb.Gamer.kind(), user.user_id()) gamer_hash = hashlib.md5(user.user_id() + SALT).hexdigest() r.timestamp = int(time.time()) #get backpack bp_beds = GqlQuery('SELECT * FROM Backpack WHERE ANCESTOR IS :1 AND name=:2', gamer_key, 'flowerbed').get() if bp_beds.amount: #lower backpack bp_beds.amount -= 1 bp_beds.put() #add flowerbed point = GeoPt(lat, lon) cell = geocell.compute(point, RULES['GEO_RESOLUTION']) flowerbed = kloombaDb.Flowerbed(parent=Key.from_path(kloombaDb.Flowerbed.kind(), cell)) flowerbed.point = point flowerbed.tile = cell flowerbed.owner = user.user_id() flowerbed.owner_public_id = gamer_hash flowerbed.put() #save to memcache memcache.set(str(flowerbed.key()), flowerbed) #add possession possession = kloombaDb.Possession(parent=gamer_key) possession.flowerbed = flowerbed possession.put() backpack = GqlQuery('SELECT * FROM Backpack WHERE ANCESTOR IS :1', gamer_key).run() #set timestamps r.flowerbed.timestamp = int(time.time()) r.backpack.timestamp = int(time.time()) #set flowerbed r.flowerbed.id = str(flowerbed.key()) r.flowerbed.latitude = int(self.request.get('lat')) r.flowerbed.longitude = int(self.request.get('lon')) r.flowerbed.owner = gamer_hash r.flowerbed.flowers = 0 #set backpack for i in backpack: bp = r.backpack.item.add() bp.name = i.name bp.amount = i.amount if self.request.get('debug', False): self.response.out.write(r) else: self.response.out.write(r.SerializeToString())
def get(self): r = FlowerbedExplore() user = users.get_current_user() gamer_key = Key.from_path(kloombaDb.Gamer.kind(), user.user_id()) gamer = GqlQuery('SELECT * FROM Gamer WHERE ANCESTOR IS :1', gamer_key).get() if self.request.get('lat') and self.request.get('lon'): r.timestamp = int(time.time()) lat = float(self.request.get('lat')) / 1000000 lon = float(self.request.get('lon')) / 1000000 gamer.point = GeoPt(lat, lon) #update user position #take adjacent tiles tiles = [] requests = [] tile = geocell.compute(GeoPt(lat, lon), RULES['GEO_RESOLUTION']) tiles.append(tile) tiles.extend(geocell.all_adjacents(tile)) kind = kloombaDb.Flowerbed.kind() #prepare async requests for i in tiles: request = GqlQuery( 'SELECT * FROM Flowerbed WHERE ANCESTOR IS :1', Key.from_path(kind, i)).run() requests.append(request) for i in requests: for j in i: fb = r.flowerbed.add() fb.timestamp = int(time.mktime(j.timestamp.timetuple())) fb.id = str(j.key()) fb.latitude = int(j.point.lat * 1000000) fb.longitude = int(j.point.lon * 1000000) fb.owner = j.owner_public_id fb.flowers = j.flowers gamer.put() if self.request.get('debug', False): self.response.out.write(r) else: self.response.out.write(r.SerializeToString())
def get(self): r = FlowerbedExplore() user = users.get_current_user() gamer_key = Key.from_path(kloombaDb.Gamer.kind(), user.user_id()) gamer = GqlQuery('SELECT * FROM Gamer WHERE ANCESTOR IS :1', gamer_key).get() if self.request.get('lat') and self.request.get('lon'): r.timestamp = int(time.time()) lat = float(self.request.get('lat')) / 1000000 lon = float(self.request.get('lon')) / 1000000 gamer.point = GeoPt(lat, lon) #update user position #take adjacent tiles tiles = [] requests = [] tile = geocell.compute(GeoPt(lat, lon), RULES['GEO_RESOLUTION']) tiles.append(tile) tiles.extend(geocell.all_adjacents(tile)) kind = kloombaDb.Flowerbed.kind() #prepare async requests for i in tiles: request = GqlQuery('SELECT * FROM Flowerbed WHERE ANCESTOR IS :1', Key.from_path(kind, i)).run() requests.append(request) for i in requests: for j in i: fb = r.flowerbed.add() fb.timestamp = int(time.mktime(j.timestamp.timetuple())) fb.id = str(j.key()) fb.latitude = int(j.point.lat * 1000000) fb.longitude = int(j.point.lon * 1000000) fb.owner = j.owner_public_id fb.flowers = j.flowers gamer.put() if self.request.get('debug', False): self.response.out.write(r) else: self.response.out.write(r.SerializeToString())
def get(self): r = BookmarkAdd() if not self.request.get('id'): return fb_key = self.request.get('id') user = users.get_current_user() gamer_key = Key.from_path(kloombaDb.Gamer.kind(), user.user_id()) #get flowerbed flowerbed = GqlQuery('SELECT * FROM Flowerbed WHERE __key__=:1', fb_key).get() if not flowerbed: return #no such flowerbed #check bookmark bookmark = GqlQuery( 'SELECT * FROM Bookmark WHERE ANCESTOR IS :1 AND flowerbed=:2', gamer_key, Key(fb_key)).get() if bookmark: return #bookmark allready exist bookmark = kloombaDb.Bookmark(parent=gamer_key) bookmark.owner = user.user_id() bookmark.flowerbed = flowerbed bookmark.put() r.timestamp = int(time.time()) fb = r.flowerbed fb.timestamp = int(time.mktime(flowerbed.timestamp.timetuple())) fb.id = str(flowerbed.key()) fb.latitude = int(flowerbed.point.lat * 1000000) fb.longitude = int(flowerbed.point.lon * 1000000) fb.owner = flowerbed.owner_public_id fb.flowers = flowerbed.flowers if self.request.get('debug', False): self.response.out.write(r) else: self.response.out.write(r.SerializeToString())
def get(self): r = BookmarkAdd() if not self.request.get('id'): return fb_key = self.request.get('id') user = users.get_current_user() gamer_key = Key.from_path(kloombaDb.Gamer.kind(), user.user_id()) #get flowerbed flowerbed = GqlQuery('SELECT * FROM Flowerbed WHERE __key__=:1', fb_key).get() if not flowerbed: return #no such flowerbed #check bookmark bookmark = GqlQuery('SELECT * FROM Bookmark WHERE ANCESTOR IS :1 AND flowerbed=:2', gamer_key, Key(fb_key)).get() if bookmark: return #bookmark allready exist bookmark = kloombaDb.Bookmark(parent=gamer_key) bookmark.owner = user.user_id() bookmark.flowerbed = flowerbed bookmark.put() r.timestamp = int(time.time()) fb = r.flowerbed fb.timestamp = int(time.mktime(flowerbed.timestamp.timetuple())) fb.id = str(flowerbed.key()) fb.latitude = int(flowerbed.point.lat * 1000000) fb.longitude = int(flowerbed.point.lon * 1000000) fb.owner = flowerbed.owner_public_id fb.flowers = flowerbed.flowers if self.request.get('debug', False): self.response.out.write(r) else: self.response.out.write(r.SerializeToString())
def get(self): r = FlowerbedTransfer() if not int(self.request.get('amount'), 0): return fb_id = self.request.get('id') amount = int(self.request.get('amount')) #get from memcache flowerbed = memcache.get(fb_id) if not flowerbed: flowerbed = GqlQuery('SELECT * FROM Flowerbed WHERE __key__=:1', Key(fb_id)).get() ts = time.time() if flowerbed: fb_flowers = flowerbed.flowers +\ int(floor( (ts - time.mktime(flowerbed.timestamp.timetuple())) / RULES['TICK'] *\ RULES['FLOWERS_PER_TICK'] )) user = users.get_current_user() gamer_key = Key.from_path(kloombaDb.Gamer.kind(), user.user_id()) gamer_hash = hashlib.md5(user.user_id() + SALT).hexdigest() bp_flowers = GqlQuery('SELECT * FROM Backpack WHERE ANCESTOR IS :1 AND name=:2', gamer_key, 'flower').get() #TODO: check if flowerbed is close to user if amount < 0: #from if flowerbed.owner != user.user_id(): return #not your flowerbed if fb_flowers < amount * -1: return #not enough on flowerbed #ok, now subtract flowerbed.flowers = fb_flowers + amount flowerbed.put() memcache.set(str(flowerbed.key()), flowerbed) bp_flowers.amount -= amount bp_flowers.put() else: #to if bp_flowers.amount < amount: return #not enough in backpack if flowerbed.owner == user.user_id(): #ok, it's mine flowerbed.flowers = fb_flowers + amount flowerbed.put() memcache.set(str(flowerbed.key()), flowerbed) bp_flowers.amount -= amount bp_flowers.put() else: #ok, attack if fb_flowers - amount >= 0: #still the same owner flowerbed.flowers = fb_flowers - amount flowerbed.put() memcache.set(str(flowerbed.key()), flowerbed) bp_flowers.amount -= amount bp_flowers.put() else: #conquer #set lost lost = GqlQuery('SELECT * FROM Possession WHERE ANCESTOR IS :1 AND flowerbed=:2', Key.from_path(kloombaDb.Gamer.kind(), flowerbed.owner), flowerbed).get() lost.lost = True lost.put() #set flowerbed flowerbed.flowers = amount - fb_flowers flowerbed.owner = user.user_id() flowerbed.owner_public_id = gamer_hash flowerbed.put() memcache.set(str(flowerbed.key()), flowerbed) #set backpack bp_flowers.amount -= amount bp_flowers.put() #set conquer possession = GqlQuery('SELECT * FROM Possession WHERE ANCESTOR IS :1 AND flowerbed=:2', gamer_key, flowerbed).get() if not possession: possession = kloombaDb.Possession(parent=gamer_key) possession.flowerbed = flowerbed possession.lost = False possession.put() backpack = GqlQuery('SELECT * FROM Backpack WHERE ANCESTOR IS :1', gamer_key).run() #set timestamps r.flowerbed.timestamp = int(time.time()) r.backpack.timestamp = int(time.time()) #set flowerbed r.flowerbed.id = str(flowerbed.key()) r.flowerbed.latitude = int(flowerbed.point.lat * 1000000) r.flowerbed.longitude = int(flowerbed.point.lon * 1000000) r.flowerbed.owner = flowerbed.owner_public_id r.flowerbed.flowers = flowerbed.flowers #set backpack for i in backpack: bp = r.backpack.item.add() bp.name = i.name bp.amount = i.amount if self.request.get('debug', False): self.response.out.write(r) else: self.response.out.write(r.SerializeToString())
def get(self): r = Login() user = users.get_current_user() gamer_key = Key.from_path(kloombaDb.Gamer.kind(), user.user_id()) gamer = GqlQuery('SELECT * FROM Gamer WHERE ANCESTOR IS :1', gamer_key).get() if not gamer: #make new account gamer = kloombaDb.Gamer(parent=gamer_key) gamer.user_id = user.user_id() gamer.public_id = hashlib.md5(user.user_id() + SALT).hexdigest() gamer.name = user.nickname() gamer.put() #make new backpack backpack = [] #add flowers bp = kloombaDb.Backpack(parent=gamer_key) bp.owner = user.user_id() bp.name = 'flower' bp.amount = 100 bp.put() backpack.append(bp) #add flowerbeds bp = kloombaDb.Backpack(parent=gamer_key) bp.owner = user.user_id() bp.name = 'flowerbed' bp.amount = 100 bp.put() backpack.append(bp) #set first_time r.first_time = True else: gamer.put() backpack = GqlQuery('SELECT * FROM Backpack WHERE ANCESTOR IS :1', gamer_key).run() #set user r.user.timestamp = int(time.mktime(gamer.lastActiveTimestamp.timetuple())) r.user.id = gamer.public_id r.user.name = gamer.name r.user.level = gamer.level r.user.experience = gamer.experience #set backpack r.user.backpack.timestamp = int(time.time()) for i in backpack: bp = r.user.backpack.item.add() bp.name = i.name bp.amount = i.amount #TODO: replace with rules update timestamp #TODO: always return rules if True or int(self.request.get('ts', 0)) < 1339610761: #set rules r.rules.timestamp = 1339610761 for (k, v) in RULES.items(): rule = r.rules.item.add() rule.name = str(k) rule.value = str(v) if self.request.get('debug', False): self.response.out.write(r) else: self.response.out.write(r.SerializeToString())
def get(self): user = users.get_current_user() r = FlowerbedAdd() if self.request.get('lat') and self.request.get('lon'): #TODO: check if flowerbed is far enough from others #TODO: check if flowerbed is close enough to user lat = int(self.request.get('lat')) / 1000000.0 lon = int(self.request.get('lon')) / 1000000.0 gamer_key = Key.from_path(kloombaDb.Gamer.kind(), user.user_id()) gamer_hash = hashlib.md5(user.user_id() + SALT).hexdigest() r.timestamp = int(time.time()) #get backpack bp_beds = GqlQuery( 'SELECT * FROM Backpack WHERE ANCESTOR IS :1 AND name=:2', gamer_key, 'flowerbed').get() if bp_beds.amount: #lower backpack bp_beds.amount -= 1 bp_beds.put() #add flowerbed point = GeoPt(lat, lon) cell = geocell.compute(point, RULES['GEO_RESOLUTION']) flowerbed = kloombaDb.Flowerbed( parent=Key.from_path(kloombaDb.Flowerbed.kind(), cell)) flowerbed.point = point flowerbed.tile = cell flowerbed.owner = user.user_id() flowerbed.owner_public_id = gamer_hash flowerbed.put() #save to memcache memcache.set(str(flowerbed.key()), flowerbed) #add possession possession = kloombaDb.Possession(parent=gamer_key) possession.flowerbed = flowerbed possession.put() backpack = GqlQuery( 'SELECT * FROM Backpack WHERE ANCESTOR IS :1', gamer_key).run() #set timestamps r.flowerbed.timestamp = int(time.time()) r.backpack.timestamp = int(time.time()) #set flowerbed r.flowerbed.id = str(flowerbed.key()) r.flowerbed.latitude = int(self.request.get('lat')) r.flowerbed.longitude = int(self.request.get('lon')) r.flowerbed.owner = gamer_hash r.flowerbed.flowers = 0 #set backpack for i in backpack: bp = r.backpack.item.add() bp.name = i.name bp.amount = i.amount if self.request.get('debug', False): self.response.out.write(r) else: self.response.out.write(r.SerializeToString())
def get(self): r = FlowerbedTransfer() if not int(self.request.get('amount'), 0): return fb_id = self.request.get('id') amount = int(self.request.get('amount')) #get from memcache flowerbed = memcache.get(fb_id) if not flowerbed: flowerbed = GqlQuery('SELECT * FROM Flowerbed WHERE __key__=:1', Key(fb_id)).get() ts = time.time() if flowerbed: fb_flowers = flowerbed.flowers +\ int(floor( (ts - time.mktime(flowerbed.timestamp.timetuple())) / RULES['TICK'] *\ RULES['FLOWERS_PER_TICK'] )) user = users.get_current_user() gamer_key = Key.from_path(kloombaDb.Gamer.kind(), user.user_id()) gamer_hash = hashlib.md5(user.user_id() + SALT).hexdigest() bp_flowers = GqlQuery( 'SELECT * FROM Backpack WHERE ANCESTOR IS :1 AND name=:2', gamer_key, 'flower').get() #TODO: check if flowerbed is close to user if amount < 0: #from if flowerbed.owner != user.user_id(): return #not your flowerbed if fb_flowers < amount * -1: return #not enough on flowerbed #ok, now subtract flowerbed.flowers = fb_flowers + amount flowerbed.put() memcache.set(str(flowerbed.key()), flowerbed) bp_flowers.amount -= amount bp_flowers.put() else: #to if bp_flowers.amount < amount: return #not enough in backpack if flowerbed.owner == user.user_id(): #ok, it's mine flowerbed.flowers = fb_flowers + amount flowerbed.put() memcache.set(str(flowerbed.key()), flowerbed) bp_flowers.amount -= amount bp_flowers.put() else: #ok, attack if fb_flowers - amount >= 0: #still the same owner flowerbed.flowers = fb_flowers - amount flowerbed.put() memcache.set(str(flowerbed.key()), flowerbed) bp_flowers.amount -= amount bp_flowers.put() else: #conquer #set lost lost = GqlQuery( 'SELECT * FROM Possession WHERE ANCESTOR IS :1 AND flowerbed=:2', Key.from_path(kloombaDb.Gamer.kind(), flowerbed.owner), flowerbed).get() lost.lost = True lost.put() #set flowerbed flowerbed.flowers = amount - fb_flowers flowerbed.owner = user.user_id() flowerbed.owner_public_id = gamer_hash flowerbed.put() memcache.set(str(flowerbed.key()), flowerbed) #set backpack bp_flowers.amount -= amount bp_flowers.put() #set conquer possession = GqlQuery( 'SELECT * FROM Possession WHERE ANCESTOR IS :1 AND flowerbed=:2', gamer_key, flowerbed).get() if not possession: possession = kloombaDb.Possession(parent=gamer_key) possession.flowerbed = flowerbed possession.lost = False possession.put() backpack = GqlQuery('SELECT * FROM Backpack WHERE ANCESTOR IS :1', gamer_key).run() #set timestamps r.flowerbed.timestamp = int(time.time()) r.backpack.timestamp = int(time.time()) #set flowerbed r.flowerbed.id = str(flowerbed.key()) r.flowerbed.latitude = int(flowerbed.point.lat * 1000000) r.flowerbed.longitude = int(flowerbed.point.lon * 1000000) r.flowerbed.owner = flowerbed.owner_public_id r.flowerbed.flowers = flowerbed.flowers #set backpack for i in backpack: bp = r.backpack.item.add() bp.name = i.name bp.amount = i.amount if self.request.get('debug', False): self.response.out.write(r) else: self.response.out.write(r.SerializeToString())