コード例 #1
0
ファイル: main.py プロジェクト: maraoz/combo-combat
 def handle(self):
     username = self.request.get("u")
     if not username:
         return {"success": False, "error": "format"}
     player = Player.all().filter('username = '******'searching = ', True).filter('username !=', username).get()
     if other:
         
         other.searching = False
         other.match_server = server
         player.match_server = server
         server.free = False
         
         other.put()
         player.put()
         server.put()
         
         return {"success": True}
     
     player.searching = True
     player.put()
     
     return {"success": True}
コード例 #2
0
ファイル: main.py プロジェクト: maraoz/combo-combat
    def handle(self):
        host = self.request.get("h")
        players = self.request.get("p")
        scores = self.request.get("s")
        duration = self.request.get("d")
        
        # preconditions
        try:
            players = players.split(",")
            playera, playerb = tuple(players)
            scorea, scoreb = tuple([int(x) for x in scores.split(",")])
            scores = [scorea, scoreb]
        except Exception:
            players, scores = None, None
        try:
            duration = long(float(duration))
        except ValueError:
            duration = None
        if not host or not players or not scores or not duration:
            return {"success": False, "error": "format"}

        server = Server.all().filter('host = ', host).get()
        if not server:
            return {"success": False, "error": "nonexisting"}
        
        
        # actual processing
        server.free = True
        
        playera = Player.all().filter('username = '******'username = ', playerb).get()
        
        
        (pa_new_elo, pb_new_elo) = calculate_elos(playera.elo, playerb.elo, PLAYER_A if scorea > scoreb else PLAYER_B)
        
        mh = MatchHistory(
            players = players,
            scores = scores,
            elo_delta = playera.elo - playerb.elo,
            duration = duration)    
        
        playera.elo = int(pa_new_elo)
        playerb.elo = int(pb_new_elo)
        
        server.put()
        playera.put()
        playerb.put()
        mh.put()
        
        return {"success": True}
コード例 #3
0
ファイル: xmpp_service.py プロジェクト: bcse/gae-shaft
    def dispatch(self, message):
        try:
            request = json.loads(message.body)
            assert isinstance(request, dict), 'Request should be a dict().'
            assert 'request' in request, 'Required argument is missing: "request".'
            method_name = str(request['request'])
            assert not method_name.startswith(
                '_'), 'You are not allowed to call private API.'
            f = getattr(controller, method_name, None)
            assert callable(f), 'You are requesting an unknown API.'

            # Get Player record from server.
            sender = db.IM('xmpp', message.sender.split('/')[0])
            player = Player.all().filter('account =', sender).fetch(limit=1)
            if len(player) == 0:  # Create a new record for new Player.
                player = Player(account=sender)
                player.put()
            else:
                player = player[0]
            assert player is not None, 'Failed to get player data.'

            # Take action
            arg = request['arg'] if 'arg' in request else {}
            assert isinstance(arg, dict), 'Arguments should be a dict()'
            arg['sender'] = player  # append sender to arguments
            result = f(arg)
        except AssertionError, e:
            result = json.dumps({
                'response':
                method_name if 'method_name' in locals() else 'unknown',
                'stat':
                'fail',
                'msg':
                str(e)
            })
コード例 #4
0
ファイル: main.py プロジェクト: maraoz/combo-combat
 def handle(self):
     username = self.request.get("u")
     password = self.request.get("p")
     
     if not username or not password:
         return {"success": False , "error": "format"}
     
     player = Player.all().filter('username ='******'password', hash_digest(password)).get()
     if not player:
         return {"success": False , "error": "failed"}
     if not player.counter:
         player.counter = 0
     player.counter += 1
     player.put()
     return {"success": True}
コード例 #5
0
ファイル: main.py プロジェクト: maraoz/combo-combat
    def handle(self):
        username = self.request.get("u")
        if not username:
            return {"success": False, "error": "format"}

        player = Player.all().filter('username = ', username).get()
        if not player:
            return {"success": False, "error": "nonexisting"}
        
        if not player.match_server:
            return {"success": True, "host": None}
        
        server_host = player.match_server.host
        
        player.match_server = None
        player.put()
        
        return {"success": True, "host": server_host}
コード例 #6
0
ファイル: main.py プロジェクト: maraoz/combo-combat
 def handle(self):
     username = self.request.get("u")
     password = self.request.get("p")
     
     if not username or not password:
         return {"success": False , "error": "format"}
     
     same_name = Player.all().filter('username =', username)
     if same_name.get():
         return {"success": False , "error": "username"}
     
     
     player = Player(
         username=username, 
         password=hash_digest(password),
         counter = 0,
         elo = DEFAULT_ELO,
         searching=False, 
         match_server=None)
     player.put()
     return {"success": True}