Example #1
0
    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())
Example #2
0
    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())
Example #3
0
    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())
Example #4
0
    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())