| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src/battlemap/query')
| -rw-r--r-- | src/battlemap/query/bm_character_turn.erl | 282 | ||||
| -rw-r--r-- | src/battlemap/query/bm_load_state.erl | 159 | 
2 files changed, 0 insertions, 441 deletions
diff --git a/src/battlemap/query/bm_character_turn.erl b/src/battlemap/query/bm_character_turn.erl deleted file mode 100644 index 7a7476c..0000000 --- a/src/battlemap/query/bm_character_turn.erl +++ /dev/null @@ -1,282 +0,0 @@ --module(bm_character_turn). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --include("../../../include/yaws_api.hrl"). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export([out/1]). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%-spec send_to_database (list(database_diff:type()), character_turn_request:type()) -> 'ok'. - - -%%%% REQUEST DECODING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec decode_request (binary()) -> bm_character_turn_request:type(). -decode_request (BinaryRequest) -> -   JSONMap = jiffy:decode(BinaryRequest, [return_maps]), - -   bm_character_turn_request:decode(JSONMap). - -%%%% USER AUTHENTICATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec authenticate_user (bm_character_turn_request:type()) -> 'ok'. -authenticate_user (Request) -> -   PlayerID = bm_character_turn_request:get_player_id(Request), -   SessionToken = bm_character_turn_request:get_session_token(Request), - -   bm_security:assert_identity(PlayerID, SessionToken), -   bm_security:lock_queries(PlayerID), - -   ok. - -%%%% MAIN LOGIC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec fetch_data -   ( -      bm_character_turn_request:type() -   ) -   -> bm_character_turn_data:type(). -fetch_data (Request) -> -   PlayerID = bm_character_turn_request:get_player_id(Request), -   BattleID = bm_character_turn_request:get_battle_id(Request), -   CharacterIX = bm_character_turn_request:get_character_ix(Request), -   Battle = sh_timed_cache:fetch(battle_db, PlayerID, BattleID), - -   bm_character_turn_data:new(Battle, CharacterIX). - -%%%% ASSERTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec assert_user_is_current_player -   ( -      bm_character_turn_data:type(), -      bm_character_turn_request:type() -   ) -> 'ok'. -assert_user_is_current_player (Data, Request) -> -   PlayerID = bm_character_turn_request:get_player_id(Request), -   Battle = bm_character_turn_data:get_battle(Data), -   CurrentPlayerTurn = bm_battle:get_current_player_turn(Battle), -   CurrentPlayerIX = bm_player_turn:get_player_ix(CurrentPlayerTurn), -   CurrentPlayer = bm_battle:get_player(CurrentPlayerIX, Battle), - -   true = (PlayerID == bm_player:get_id(CurrentPlayer)), - -   ok. - --spec assert_user_owns_played_character -   ( -      bm_character_turn_data:type(), -      bm_character_turn_request:type() -   ) -> 'ok'. -assert_user_owns_played_character (Data, Request) -> -   PlayerID = bm_character_turn_request:get_player_id(Request), -   Battle = bm_character_turn_data:get_battle(Data), -   Players = bm_battle:get_players(Battle), -   Character = bm_character_turn_data:get_character(Data), -   CharacterPlayerIX = bm_character:get_player_index(Character), -   CharacterPlayer = array:get(CharacterPlayerIX, Players), -   CharacterPlayerID = bm_player:get_id(CharacterPlayer), - -   true = (PlayerID == CharacterPlayerID), - -   ok. - --spec assert_character_can_be_played (bm_character_turn_data:type()) -> 'ok'. -assert_character_can_be_played (Data) -> -   Character = bm_character_turn_data:get_character(Data), - -   true = bm_character:get_is_active(Character), - -   ok. - --spec assert_user_permissions -   ( -      bm_character_turn_data:type(), -      bm_character_turn_request:type() -   ) -> 'ok'. -assert_user_permissions (Data, Request) -> -   assert_user_is_current_player(Data, Request), -   assert_user_owns_played_character(Data, Request), -   assert_character_can_be_played(Data), - -   ok. - -%%%% QUERY LOGIC HANDLING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec finalize_character -   ( -      bm_character_turn_update:type() -   ) -   -> bm_character_turn_update:type(). -finalize_character (Update) -> -   Data = bm_character_turn_update:get_data(Update), -   Character = bm_character_turn_data:get_character(Data), - -   DisabledCharacter = bm_character:set_is_active(false, Character), -   UpdatedData = bm_character_turn_data:set_character(DisabledCharacter, Data), -   FinalizedData = bm_character_turn_data:clean_battle(UpdatedData), - -   DBQuery = -      sh_db_query:update_indexed -      ( -         bm_battle:get_characters_field(), -         bm_character_turn_data:get_character_ix(Data), -         [ sh_db_query:set_field(bm_character:get_is_active_field(), false) ] -      ), - -   S0Update = bm_character_turn_update:set_data(FinalizedData, Update), -   S1Update = bm_character_turn_update:add_to_db(DBQuery, S0Update), - -   S1Update. - --spec handle_actions -   ( -      bm_character_turn_data:type(), -      bm_character_turn_request:type() -   ) -   -> bm_character_turn_update:type(). -handle_actions (Data, Request) -> -   Actions = bm_character_turn_request:get_actions(Request), - -   EmptyUpdate = bm_character_turn_update:new(Data), -   PostActionsUpdate = -      lists:foldl(fun bm_turn_actions:handle/2, EmptyUpdate, Actions), - -   finalize_character(PostActionsUpdate). - --spec update_timeline -   ( -      bm_character_turn_update:type() -   ) -   -> bm_character_turn_update:type(). -update_timeline (Update) -> -   NewTimelineElements = bm_character_turn_update:get_timeline(Update), -   Data = bm_character_turn_update:get_data(Update), -   Battle = bm_character_turn_data:get_battle(Data), -   PlayerTurn = bm_battle:get_current_player_turn(Battle), -   PlayerIX = bm_player_turn:get_player_ix(PlayerTurn), -   Player = bm_battle:get_player(PlayerIX, Battle), - -   UpdatedPlayer = bm_player:add_to_timeline(NewTimelineElements, Player), -   UpdatedBattle = bm_battle:set_player(PlayerIX, UpdatedPlayer, Battle), -   UpdatedData = bm_character_turn_data:set_battle(UpdatedBattle, Data), - -   DBQuery = -      sh_db_query:update_indexed -      ( -         bm_battle:get_players_field(), -         PlayerIX, -         [ -            sh_db_query:add_to_field -            ( -               bm_player:get_timeline_field(), -               NewTimelineElements, -               true % We add those to the start of the list -            ) -         ] -      ), - -   S0Update = bm_character_turn_update:set_data(UpdatedData, Update), -   S1Update = bm_character_turn_update:add_to_db(DBQuery, S0Update), - -   S1Update. - - --spec update_data -   ( -      bm_character_turn_data:type(), -      bm_character_turn_request:type() -   ) -   -> bm_character_turn_update:type(). -update_data (Data, Request) -> -   PostActionsUpdate = handle_actions(Data, Request), -   PostCharacterTurnUpdate = update_timeline(PostActionsUpdate), - -   bm_next_turn:update_if_needed(PostCharacterTurnUpdate). - -%%%% DATABASE UPDATES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec send_to_database -   ( -      bm_character_turn_update:type(), -      bm_character_turn_request:type() -   ) -   -> 'ok'. -send_to_database (Update, Request) -> -   PlayerID = bm_character_turn_request:get_player_id(Request), -   BattleID = bm_character_turn_request:get_battle_id(Request), -   Ops = bm_character_turn_update:get_db(Update), -   Query = sh_db_query:new(battle_db, BattleID, {user, PlayerID}, Ops), - -   sh_database:commit(Query), - -   ok. - --spec send_to_cache -   ( -      bm_character_turn_update:type(), -      bm_character_turn_request:type() -   ) -   -> 'ok'. -send_to_cache (Update, Request) -> -   PlayerID = bm_character_turn_request:get_player_id(Request), -   BattleID = bm_character_turn_request:get_battle_id(Request), -   Data = bm_character_turn_update:get_data(Update), -   Battle = bm_character_turn_data:get_battle(Data), - -   sh_timed_cache:update(battle_db, PlayerID, BattleID, Battle), - -   ok. - --spec commit_update -   ( -      bm_character_turn_update:type(), -      bm_character_turn_request:type() -   ) -   -> 'ok'. -commit_update (Update, Request) -> -   send_to_database(Update, Request), -   send_to_cache(Update, Request), - -   ok. - -%%%% USER DISCONNECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec disconnect_user (bm_character_turn_request:type()) -> 'ok'. -disconnect_user (Request) -> -   PlayerID = bm_character_turn_request:get_player_id(Request), - -   bm_security:unlock_queries(PlayerID), - -   ok. - -%%%% REPLY GENERATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec generate_reply (bm_character_turn_update:type()) -> binary(). -generate_reply (Update) -> -   NewTimelineItems = bm_character_turn_update:get_timeline(Update), - -   TurnResultReply = bm_turn_results:generate(NewTimelineItems), - -   jiffy:encode([TurnResultReply]). - -%%%% MAIN LOGIC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec handle (binary()) -> binary(). -handle (EncodedRequest) -> -   Request = decode_request(EncodedRequest), -   authenticate_user(Request), -   Data = fetch_data(Request), -   assert_user_permissions(Data, Request), -   Update = update_data(Data, Request), -   commit_update(Update, Request), -   disconnect_user(Request), -   generate_reply(Update). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -out(A) -> -   { -      content, -      "application/json; charset=UTF-8", -      handle(A#arg.clidata) -   }. diff --git a/src/battlemap/query/bm_load_state.erl b/src/battlemap/query/bm_load_state.erl deleted file mode 100644 index 505ec3b..0000000 --- a/src/battlemap/query/bm_load_state.erl +++ /dev/null @@ -1,159 +0,0 @@ --module(bm_load_state). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --include("../../../include/yaws_api.hrl"). - --record -( -   input, -   { -      player_id :: bm_player:id(), -      session_token :: binary(), -      battle_id :: binary() -   } -). - --record -( -   query_state, -   { -      battle :: bm_battle:type() -   } -). - --type input() :: #input{}. --type query_state() :: #query_state{}. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export([out/1]). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec parse_input (binary()) -> input(). -parse_input (Req) -> -   JSONReqMap = jiffy:decode(Req, [return_maps]), -   PlayerID = maps:get(<<"pid">>, JSONReqMap), -   SessionToken =  maps:get(<<"stk">>, JSONReqMap), -   BattleID = maps:get(<<"bmi">>, JSONReqMap), - -   #input -   { -      player_id = PlayerID, -      session_token = SessionToken, -      battle_id = BattleID -   }. - --spec fetch_data (input()) -> query_state(). -fetch_data (Input) -> -   PlayerID = Input#input.player_id, -   BattleID = Input#input.battle_id, - -   Battle = sh_timed_cache:fetch(battle_db, PlayerID, BattleID), - -   #query_state -   { -      battle = Battle -   }. - --spec generate_reply(query_state(), input()) -> binary(). -generate_reply (QueryState, Input) -> -   PlayerID = Input#input.player_id, -   Battle = QueryState#query_state.battle, -   Players = bm_battle:get_players(Battle), - -   PlayerIX = -      sh_array_util:first -      ( -         fun (Player) -> -            (bm_player:get_id(Player) == PlayerID) -         end, -         Players -      ), - -   true = (PlayerIX >= 0), - -   SetTimeline = -      bm_set_timeline:generate -      ( -         bm_battle:get_encoded_last_turns_effects(Battle) -      ), - -   SetMap = bm_set_map:generate(bm_battle:get_battlemap(Battle)), - -   AddCharList = -      array:sparse_to_list -      ( -         array:map -         ( -            fun (IX, Character) -> -               bm_add_char:generate(IX, Character, PlayerIX) -            end, -            bm_battle:get_characters(Battle) -         ) -      ), - -   AddWeaponList = -      lists:map -      ( -         fun (WeaponID) -> -            bm_add_weapon:generate(sh_weapon:from_id(WeaponID)) -         end, -         bm_battle:get_used_weapon_ids(Battle) -      ), - -   AddArmorList = -      lists:map -      ( -         fun (ArmorID) -> -            bm_add_armor:generate(sh_armor:from_id(ArmorID)) -         end, -         bm_battle:get_used_armor_ids(Battle) -      ), - -   AddTileList = -      lists:map -      ( -         fun (TileID) -> -            bm_add_tile:generate(bm_tile:from_id(TileID)) -         end, -         bm_battle:get_used_tile_ids(Battle) -      ), - -   OutputList = -      ( -         AddTileList -         ++ [SetTimeline, SetMap | AddWeaponList] -         ++ AddArmorList -         ++ AddCharList -      ), -   Output = jiffy:encode(OutputList), - -   Output. - --spec handle (binary()) -> binary(). -handle (Req) -> -   Input = parse_input(Req), -   bm_security:assert_identity -   ( -      Input#input.player_id, -      Input#input.session_token -   ), -   bm_security:lock_queries(Input#input.player_id), -   QueryState = fetch_data(Input), -   bm_security:unlock_queries(Input#input.player_id), -   generate_reply(QueryState, Input). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -out(A) -> -   { -      content, -      "application/json; charset=UTF-8", -      handle(A#arg.clidata) -   }.  | 


