summaryrefslogtreecommitdiff
path: root/src/query
diff options
context:
space:
mode:
Diffstat (limited to 'src/query')
-rw-r--r--src/query/character_turn.erl255
-rw-r--r--src/query/load_state.erl110
2 files changed, 0 insertions, 365 deletions
diff --git a/src/query/character_turn.erl b/src/query/character_turn.erl
deleted file mode 100644
index 85c5db8..0000000
--- a/src/query/character_turn.erl
+++ /dev/null
@@ -1,255 +0,0 @@
--module(character_turn).
-% FIXME: There's still too much of a mess in this module.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--include("../../include/yaws_api.hrl").
-
--record
-(
- input,
- {
- player_id :: player:id(),
- session_token :: binary(),
- battle_id :: binary(),
- character_instance_ix :: non_neg_integer(),
- actions :: list(battle_action:struct())
- }
-).
-
--record
-(
- relevant_data,
- {
- battle :: battle:struct(),
- played_character_instance :: character_instance:struct()
- }
-).
-
--type input() :: #input{}.
--type relevant_data() :: #relevant_data{}.
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export([out/1]).
-
--export_type([relevant_data/0]).
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
--spec parse_input (binary()) -> input().
-parse_input (Req) ->
- JSONReqMap = jiffy:decode(Req, [return_maps]),
- CharacterInstanceIX = binary_to_integer(maps:get(<<"cix">>, JSONReqMap)),
- EncodedActions = maps:get(<<"act">>, JSONReqMap),
- Actions = lists:map(fun battle_action:decode/1, EncodedActions),
-
- #input
- {
- player_id = maps:get(<<"pid">>, JSONReqMap),
- session_token = maps:get(<<"stk">>, JSONReqMap),
- battle_id = maps:get(<<"bid">>, JSONReqMap),
- character_instance_ix = CharacterInstanceIX,
- actions = Actions
- }.
-
--spec fetch_relevant_data (input()) -> relevant_data().
-fetch_relevant_data (Input) ->
- PlayerID = Input#input.player_id,
- BattleID = Input#input.battle_id,
- CharacterInstanceIX = Input#input.character_instance_ix,
-
- Battle = timed_cache:fetch(battle_db, PlayerID, BattleID),
- CharacterInstance =
- battle:get_character_instance(CharacterInstanceIX, Battle),
-
- #relevant_data
- {
- battle = Battle,
- played_character_instance = CharacterInstance
- }.
-
--spec assert_character_instance_can_be_played
- (
- relevant_data(),
- input()
- )
- -> true.
-assert_character_instance_can_be_played (RData, Input) ->
- PlayerID = Input#input.player_id,
- CharacterInstance = RData#relevant_data.played_character_instance,
- Battle = RData#relevant_data.battle,
- Character = character_instance:get_character(CharacterInstance),
- CurrentPlayerIX =
- player_turn:get_player_ix
- (
- battle:get_current_player_turn(Battle)
- ),
- CurrentPlayer = battle:get_player(CurrentPlayerIX, Battle),
- CharacterOwnerID = character:get_owner_id(Character),
-
- PlayerID = player:get_id(CurrentPlayer),
- PlayerID = CharacterOwnerID,
-
- true = character_instance:get_is_active(CharacterInstance).
-
--spec finalize_and_fuse_relevant_data
- (
- relevant_data(),
- input()
- )
- -> battle:struct().
-finalize_and_fuse_relevant_data (RData, Input) ->
- Battle = RData#relevant_data.battle,
- CharacterInstance = RData#relevant_data.played_character_instance,
-
- io:format("~nNot a character instance? ~p~n", [CharacterInstance]),
-
- FinalizedCharacterInstance =
- character_instance:set_is_active(false, CharacterInstance),
-
- battle:set_character_instance
- (
- Input#input.character_instance_ix,
- FinalizedCharacterInstance,
- Battle
- ).
-
-%-spec send_to_database (list(database_diff:struct()), input()) -> 'ok'.
--spec send_to_database (battle:struct(), input()) -> 'ok'.
-send_to_database (FinalizedBattle, Input) ->
- PlayerID = Input#input.player_id,
- BattleID = Input#input.battle_id,
-
- %% TODO: differential commit
- database_shim:commit
- (
- battle_db,
- PlayerID,
- BattleID,
- FinalizedBattle
- ).
-
--spec update_cache (battle:struct(), input()) -> 'ok'.
-update_cache (Battle, Input) ->
- PlayerID = Input#input.player_id,
- BattleID = Input#input.battle_id,
-
- timed_cache:update
- (
- battle_db,
- PlayerID,
- BattleID,
- Battle
- ).
-
--spec generate_reply ( list(any())) -> binary().
-generate_reply (EncodedClientUpdate) ->
- jiffy:encode([turn_results:generate(EncodedClientUpdate)]).
-
-handle_actions (RData, Input) ->
- Battle = RData#relevant_data.battle,
- CharacterInstance = RData#relevant_data.played_character_instance,
- CharacterInstanceIX = Input#input.character_instance_ix,
- Actions = Input#input.actions,
-
- {
- ActionsDiffUpdates,
- ClientUpdates,
- PostActionBattle,
- PostActionCharacterInstance
- } =
- lists:foldl
- (
- fun
- (
- Action,
- {
- CurrActionsDiffUpdates,
- CurrClientUpdates,
- CurrBattle,
- CurrCharacterInstance
- }
- ) ->
- {
- NewActionsDiffUpdates,
- NewClientUpdates,
- NewBattle,
- NewCharacterInstance
- } =
- battle_action:handle
- (
- CurrBattle,
- CurrCharacterInstance,
- CharacterInstanceIX,
- Action
- ),
- {
- (NewActionsDiffUpdates ++ CurrActionsDiffUpdates),
- (NewClientUpdates ++ CurrClientUpdates),
- NewBattle,
- NewCharacterInstance
- }
- end,
- {[], [], Battle, CharacterInstance},
- Actions
- ),
- {
- ActionsDiffUpdates,
- ClientUpdates,
- RData#relevant_data
- {
- battle = PostActionBattle,
- played_character_instance = PostActionCharacterInstance
- }
- }.
-
--spec handle (binary()) -> binary().
-handle (Req) ->
- Input = parse_input(Req),
- PlayerID = Input#input.player_id,
- PlayerSessionToken = Input#input.session_token,
-
- security:assert_identity(PlayerID, PlayerSessionToken),
- security:lock_queries(PlayerID),
-
- RData = fetch_relevant_data(Input),
-
- assert_character_instance_can_be_played(RData, Input),
-
- {ActionsDiffUpdate, ClientUpdate, UpdatedRData} =
- handle_actions(RData, Input),
-
- EncodedClientUpdate = lists:map(fun turn_result:encode/1, ClientUpdate),
-
- UpdatedBattle = finalize_and_fuse_relevant_data(UpdatedRData, Input),
-
- UpdatedBattle2 =
- battle_turn:store_timeline(EncodedClientUpdate, UpdatedBattle),
-
- {TurnDiffUpdate, FinalizedBattle} =
- battle_turn:handle_post_play(UpdatedBattle2),
-
- DiffUpdate = (TurnDiffUpdate ++ ActionsDiffUpdate),
-
- %send_to_database(DiffUpdate, Input),
- send_to_database(FinalizedBattle, Input),
- update_cache(FinalizedBattle, Input),
-
- io:format("~nCharacter turn result:~n~p~n", [DiffUpdate]),
-
- security:unlock_queries(PlayerID),
-
- generate_reply(EncodedClientUpdate).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-out(A) ->
- {
- content,
- "application/json; charset=UTF-8",
- handle(A#arg.clidata)
- }.
diff --git a/src/query/load_state.erl b/src/query/load_state.erl
deleted file mode 100644
index a03a20f..0000000
--- a/src/query/load_state.erl
+++ /dev/null
@@ -1,110 +0,0 @@
--module(load_state).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--include("../../include/yaws_api.hrl").
-
--record
-(
- input,
- {
- player_id :: player:id(),
- session_token :: binary(),
- battle_id :: binary()
- }
-).
-
--record
-(
- query_state,
- {
- battle :: battle:struct()
- }
-).
-
--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 =
- 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,
-
- jiffy:encode
- (
- [
- set_timeline:generate(battle:get_encoded_last_turns_effects(Battle)),
- set_map:generate(battle:get_battlemap(Battle))
- |
- array:sparse_to_list
- (
- array:map
- (
- fun (IX, CharacterInstance) ->
- add_char:generate(IX, CharacterInstance, PlayerID)
- end,
- battle:get_character_instances(Battle)
- )
- )
- ]
- ).
-
--spec handle (binary()) -> binary().
-handle (Req) ->
- Input = parse_input(Req),
- security:assert_identity(Input#input.player_id, Input#input.session_token),
- security:lock_queries(Input#input.player_id),
- QueryState = fetch_data(Input),
- 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)
- }.