Ejemplo n.º 1
0
def battle_join_check(token, battle_id):
    """
    試合に参加しているかチェック

    Params
    ----------
    token : str
        トークン
    battle_id : int
        試合ID

    Returns
    ----------
    bool
        エラーの有無
    int
        エラーがあった場合、そのHTTPステータス
    dict or list
        エラーがあった場合、その内容
    """

    team = TeamDBAccessManager().get_data(token=token)[0]
    battle_db_manager = BattleDBAccessManager()
    battle = BattleDBAccessManager().get_data(battle_id=battle_id)
    if len(battle) == 0:
        return True, 400, {"startAtUnixTime": 0, "status": "InvalidMatches"}
    battle = battle[0]
    if (battle["teamA"] != team["id"]) and (battle["teamB"] != team["id"]):
        return True, 400, {"startAtUnixTime": 0, "status": "InvalidMathches"}

    return False, None, None
Ejemplo n.º 2
0
def get_all_matches(token):
    """
    トークンを元に試合情報を返す

    Params
    ----------
    token : str
        トークン

    Returns
    ----------
    int
        HTTPステータス
    dict or list
        レスポンスデータ
    """

    # トークンチェック
    is_error, status, response = token_check(token)
    if is_error:
        return status, response

    battle_db_manager = BattleDBAccessManager()
    team_db_manager = TeamDBAccessManager()
    team = team_db_manager.get_data(token=token)[0]

    # 同じトークンを持つチーム一覧を抜き出し→そのチームが参戦しているチームを抜き出す(now_battle=True)
    match_list = []
    raw_battle_list = battle_db_manager.get_data(team_id=team["id"])
    for battle in list(filter(lambda x: x["now_battle"], raw_battle_list)):
        match_team = battle["teamA"] if battle["teamB"] == team[
            "id"] else battle["teamB"]
        match_list.append({
            "id":
            battle["id"],
            "intervalMillis":
            battle["interval_mills"],
            "matchTo":
            team_db_manager.get_data(match_team)[0]["name"],
            "teamID":
            team["id"],
            "turnMillis":
            battle["turn_mills"],
            "turns":
            battle["turn"]
        })
    return 200, match_list
Ejemplo n.º 3
0
def save_action(battle_id, token, turn, agent_id, action_type, dx, dy):
    if action_type not in ["move", "remove", "stay"]:
        raise ValueError(
            "action_type must be one of [\"move\", \"remove\", \"stay\"]")
    if abs(dx) > 1 or abs(dy) > 1:
        raise ValueError("(dx, dy) must be in the range -1 to 1")

    # トークンを元にしてチームIDを取得
    team_id = TeamDBAccessManager().get_data(token=token)[0]["id"]
    # 指定されたID,ターンにまだ行動が登録されていなかった場合 or そうでない場合
    manager = ActionDBAccessManager()
    if manager.count(battle_id, turn) == 0:
        manager.insert(
            battle_id, turn,
            json.dumps({
                "actions": [{
                    "team_id": team_id,
                    "agent_id": agent_id,
                    "type": action_type,
                    "dx": dx,
                    "dy": dy,
                    "turn": turn,
                    "apply": -1
                }]
            }))
    else:
        actions = json.loads(manager.get_data(battle_id, turn)[0]["detail"])
        # 指定agent_idの行動が既に指定されていた場合 or そうでない場合
        if len(
                list(
                    filter(lambda x: x["agent_id"] == agent_id,
                           actions["actions"]))) >= 1:
            for action in actions["actions"]:
                if action["agent_id"] == agent_id:
                    action["type"] = action_type
                    action["dx"] = dx
                    action["dy"] = dy
        else:
            actions["actions"].append({
                "team_id": team_id,
                "agent_id": agent_id,
                "type": action_type,
                "dx": dx,
                "dy": dy,
                "turn": turn,
                "apply": -1
            })
        manager.update(battle_id, turn, json.dumps(actions))
Ejemplo n.º 4
0
def token_check(token):
    """
    トークン確認チェック

    Params
    ----------
    token : str
        トークン

    Return
    ----------
    bool
        エラーの有無
    int
        エラーがあった場合、そのHTTPステータス
    dict or list
        エラーがあった場合、その内容
    """

    token_check = TeamDBAccessManager().get_data(token=token)
    if len(token_check) == 0:
        return True, 401, {"status": "InvalidToken"}
    else:
        return False, None, None
Ejemplo n.º 5
0
def team_db_manager_test_4():
    manager = TeamDBAccessManager()
    result = manager.get_data(1, "test_tokenA")[0]
    assert(result["id"] == 1)
    assert(result["name"] == "teamA")
    assert(result["token"] == "test_tokenA")
Ejemplo n.º 6
0
def team_db_manager_test_1():
    manager = TeamDBAccessManager()
    manager.insert("teamA", "test_tokenA")
    manager.insert("teamB", "test_tokenB")