From d35cd5304d334582d8479062a52a8c7b34f892a1 Mon Sep 17 00:00:00 2001 From: nsensfel Date: Sun, 25 Feb 2018 12:31:54 +0100 Subject: Fixes a few typos, adds 'unimplemented' functions. --- src/handler.erl | 2 - src/io/database_shim.erl | 110 ------------------------------------------- src/io/security.erl | 14 +++++- src/query/character_turn.erl | 30 +++++++----- src/query/load_state.erl | 61 ++++++++++++------------ src/reply/add_char.erl | 6 +-- src/shim/database_shim.erl | 110 +++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 174 insertions(+), 159 deletions(-) delete mode 100644 src/io/database_shim.erl create mode 100644 src/shim/database_shim.erl diff --git a/src/handler.erl b/src/handler.erl index ed14801..f1cc1a0 100644 --- a/src/handler.erl +++ b/src/handler.erl @@ -19,7 +19,5 @@ start (_YawsParams) -> {ok, Pid} = timed_caches_manager:start(), database_shim:generate_db(Pid), - timed_caches_manager:new_cache(Pid, battlemap_db, none), timed_caches_manager:new_cache(Pid, battlemap_instance_db, none), - timed_caches_manager:new_cache(Pid, character_db, none), ok. diff --git a/src/io/database_shim.erl b/src/io/database_shim.erl deleted file mode 100644 index d55d848..0000000 --- a/src/io/database_shim.erl +++ /dev/null @@ -1,110 +0,0 @@ --module(database_shim). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export -( - [ - generate_db/1, - fetch/2, - commit/4, - assert_session_is_valid/2 - ] -). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -create_db (_Heir) -> - ets:new - ( - db_shim, - [ - set, - public, - named_table, - {keypos, 1}, - {read_concurrency, true} - ] - ), - io:format("~ndb_shim ets created.~n"). - -add_to_db (ID, Val) -> - io:format("~nadd to db_shim: ~p.~n", [{ID, Val}]), - ets:insert(db_shim, {ID, Val}). - -generate_char_instances (Battlemap, Characters) -> - lists:map - ( - fun (Char) -> - { - character:get_id(Char), - character_instance:new_instance_of - ( - Char, - (rand:uniform(2) - 1), % team, - { - rand:uniform(battlemap:get_width(Battlemap) - 1), % X - rand:uniform(battlemap:get_height(Battlemap) - 1) % Y - } - ) - } - end, - Characters - ). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -generate_db (Heir) -> - Pid = self(), - spawn(fun () -> create_db(Heir), Pid ! ok, receive ok -> ok end end), - receive - ok -> ok - end, - Players = [<<"0">>, <<"1">>], - Battlemap = battlemap_shim:generate_random(), - Characters = character_shim:generate_random(rand:uniform(12) + 4), - CharacterInsts = generate_char_instances(Battlemap, Characters), - BattlemapInstance = - battlemap_instance_shim:generate_random - ( - CharacterInsts, - Players - ), - add_to_db({battlemap_db, battlemap:get_id(Battlemap)}, Battlemap), - lists:map - ( - fun (Char) -> - add_to_db({character_db, character:get_id(Char)}, Char) - end, - Characters - ), - add_to_db - ( - {battlemap_instance_db, battlemap_instance:get_id(BattlemapInstance)}, - BattlemapInstance - ). - -fetch (DB, ObjectID) -> - io:format("~ndb_shim lookup: ~p.~n", [{DB, ObjectID}]), - case ets:lookup(db_shim, {DB, ObjectID}) of - [{_Key, Value}] -> {ok, Value}; - [] -> nothing - end. - -commit (DB, Owner, ObjectID, Value) -> - add_to_db({DB, ObjectID}, Value), - timed_cache:invalidate(DB, Owner, ObjectID). - -assert_session_is_valid (_PlayerID, _SessionToken) -> - % Ask PlayerID's login server if SessionToken is correct. - % If so, update last login time to prevent relogin within - % (database_timeout * 2). - % If not, crash. - ok. diff --git a/src/io/security.erl b/src/io/security.erl index fb7be8d..34b6df2 100644 --- a/src/io/security.erl +++ b/src/io/security.erl @@ -7,7 +7,14 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export([assert_identity/2]). +-export +( + [ + assert_identity/2, + lock_queries/1, + unlock_queries/1 + ] +). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -16,4 +23,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -assert_identity (_PlayerID, _SessionToken) -> true. +assert_identity (_PlayerID, _SessionToken) -> unimplemented. + +lock_queries (_PlayerID) -> unimplemented. +unlock_queries (_PlayerID) -> unimplemented. diff --git a/src/query/character_turn.erl b/src/query/character_turn.erl index 7ea12ad..c71791c 100644 --- a/src/query/character_turn.erl +++ b/src/query/character_turn.erl @@ -53,26 +53,31 @@ parse_input (Req) -> { player_id = maps:get(<<"pid">>, JSONReqMap), session_token = maps:get(<<"stk">>, JSONReqMap), - battlemap_instance_id = maps:get(<<"bmp">>, JSONReqMap), + battlemap_instance_id = maps:get(<<"bmi">>, JSONReqMap), character_instance_ix = CharacterInstanceIX, path = maps:get(<<"p">>, JSONReqMap), target_ix = TargetIX }. fetch_data (Input) -> + PlayerID = Input#input.player_id, + BattlemapInstanceID = Input#input.battlemap_instance_id, + CharacterInstanceIX = Input#input.character_instance_ix, + BattlemapInstance = timed_cache:fetch ( battlemap_instance_db, - Input#input.player_id, - Input#input.battlemap_instance_id + PlayerID, + BattlemapInstanceID ), CharacterInstance = array:get ( - Input#input.character_instance_ix, + CharacterInstanceIX, battlemap_instance:get_character_instances(BattlemapInstance) ), + #query_state { battlemap_instance = BattlemapInstance, @@ -241,7 +246,7 @@ activate_relevant_character_instances (IXs, CharacterInstances, Owner, IX) -> ) end. -start_next_players_turn (QueryState, Input) -> +start_next_players_turn (QueryState) -> BattlemapInstance = QueryState#query_state.battlemap_instance, PlayerIDs = battlemap_instance:get_player_ids(BattlemapInstance), PlayerTurn = battlemap_instance:get_player_turn(BattlemapInstance), @@ -281,7 +286,7 @@ start_next_players_turn (QueryState, Input) -> ), {ActivatedCharacterInstanceIXs, UpdatedBattlemapInstance}. -finalize_character_turn (QueryState, Input) -> +finalize_character_turn (QueryState) -> BattlemapInstance = QueryState#query_state.battlemap_instance, CharacterInstances = battlemap_instance:get_character_instances(BattlemapInstance), @@ -305,7 +310,7 @@ finalize_character_turn (QueryState, Input) -> }; false -> {UpdatedCharacterInstanceIXs, UpdatedBattlemapInstance} = - start_next_players_turn(QueryState, Input), + start_next_players_turn(QueryState), #query_result { is_new_turn = true, @@ -341,14 +346,14 @@ play (QueryState, [attack|Next], Input) -> Input ). -send_to_database (QueryResult, TurnType, Input) -> +send_to_database (_QueryResult, _TurnType, _Input) -> unimplemented. -update_cache (QueryResult, TurnType, Input) -> +update_cache (_QueryResult, _TurnType, _Input) -> unimplemented. -generate_reply (QueryResult, TurnType, Input) -> - jiffy:encode([[<<"ok">>]]). +generate_reply (_QueryResult, _TurnType, _Input) -> + unimplemented. handle (Req) -> Input = parse_input(Req), @@ -364,8 +369,7 @@ handle (Req) -> ( play(QueryState, TurnType, Input), Input - ), - Input + ) ), send_to_database(QueryResult, TurnType, Input), update_cache(QueryResult, TurnType, Input), diff --git a/src/query/load_state.erl b/src/query/load_state.erl index 4f0b484..d17c78d 100644 --- a/src/query/load_state.erl +++ b/src/query/load_state.erl @@ -32,9 +32,9 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% parse_input (Req) -> JSONReqMap = jiffy:decode(Req, [return_maps]), - PlayerID = maps:get(<<"player_id">>, JSONReqMap), - SessionToken = maps:get(<<"session_token">>, JSONReqMap), - BattlemapInstanceID = maps:get(<<"battlemap_id">>, JSONReqMap), + PlayerID = maps:get(<<"pid">>, JSONReqMap), + SessionToken = maps:get(<<"stk">>, JSONReqMap), + BattlemapInstanceID = maps:get(<<"bmi">>, JSONReqMap), #input { @@ -43,32 +43,39 @@ parse_input (Req) -> battlemap_instance_id = BattlemapInstanceID }. -generate_reply (Battlemap, BattlemapInstance, Characters, PlayerID) -> +fetch_data (Input) -> + PlayerID = Input#input.player_id, + BattlemapInstanceID = Input#input.battlemap_instance_id, + + BattlemapInstance = + timed_cache:fetch + ( + battlemap_instance_db, + PlayerID, + BattlemapInstanceID + ), + + #query_state + { + battlemap_instance = BattlemapInstance + }. + +generate_reply (QueryState) -> + BattlemapInstance = QueryState#query_state.battlemap_instance, jiffy:encode ( [ - set_map:generate(Battlemap) + set_map:generate(battlemap_instange:get_battlemap(BattlemapInstance)) | - lists:map + array:to_list ( - fun ({Char, CharInstance}) -> - add_char:generate - ( - Char, - CharInstance, - ( - battlemap_instance:can_play_char_instance - ( - BattlemapInstance, - PlayerID, - character:get_id(Char) - ) - and - (not character_instance:is_dead(CharInstance)) - ) - ) - end, - Characters + array:map + ( + fun (CharacterInstance) -> + add_char:generate(CharacterInstance) + end, + battlemap_instance:get_character_instances(BattlemapInstance) + ) ) ] ). @@ -79,11 +86,7 @@ handle (Req) -> security:lock_queries(Input#input.player_id), QueryState = fetch_data(Input), security:unlock_queries(Input#input.player_id), - generate_reply - ( - QueryState, - Input - ). + generate_reply(QueryState). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/src/reply/add_char.erl b/src/reply/add_char.erl index 94ea370..5e2bf56 100644 --- a/src/reply/add_char.erl +++ b/src/reply/add_char.erl @@ -7,7 +7,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export([generate/3]). +-export([generate/2]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -27,8 +27,8 @@ attributes_as_json (Attributes) -> encode (IX, CharacterInstance) -> Character = character_instance:get_character(CharacterInstance), {X, Y} = character_instance:get_location(CharacterInstance), - Attributes = character:get_attributes(Char), - {ActiveWeapon, SecondaryWeapon} = character:get_weapons(Char), + Attributes = character:get_attributes(Character), + {ActiveWeapon, SecondaryWeapon} = character:get_weapons(Character), jiffy:encode ( diff --git a/src/shim/database_shim.erl b/src/shim/database_shim.erl new file mode 100644 index 0000000..d55d848 --- /dev/null +++ b/src/shim/database_shim.erl @@ -0,0 +1,110 @@ +-module(database_shim). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export +( + [ + generate_db/1, + fetch/2, + commit/4, + assert_session_is_valid/2 + ] +). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +create_db (_Heir) -> + ets:new + ( + db_shim, + [ + set, + public, + named_table, + {keypos, 1}, + {read_concurrency, true} + ] + ), + io:format("~ndb_shim ets created.~n"). + +add_to_db (ID, Val) -> + io:format("~nadd to db_shim: ~p.~n", [{ID, Val}]), + ets:insert(db_shim, {ID, Val}). + +generate_char_instances (Battlemap, Characters) -> + lists:map + ( + fun (Char) -> + { + character:get_id(Char), + character_instance:new_instance_of + ( + Char, + (rand:uniform(2) - 1), % team, + { + rand:uniform(battlemap:get_width(Battlemap) - 1), % X + rand:uniform(battlemap:get_height(Battlemap) - 1) % Y + } + ) + } + end, + Characters + ). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +generate_db (Heir) -> + Pid = self(), + spawn(fun () -> create_db(Heir), Pid ! ok, receive ok -> ok end end), + receive + ok -> ok + end, + Players = [<<"0">>, <<"1">>], + Battlemap = battlemap_shim:generate_random(), + Characters = character_shim:generate_random(rand:uniform(12) + 4), + CharacterInsts = generate_char_instances(Battlemap, Characters), + BattlemapInstance = + battlemap_instance_shim:generate_random + ( + CharacterInsts, + Players + ), + add_to_db({battlemap_db, battlemap:get_id(Battlemap)}, Battlemap), + lists:map + ( + fun (Char) -> + add_to_db({character_db, character:get_id(Char)}, Char) + end, + Characters + ), + add_to_db + ( + {battlemap_instance_db, battlemap_instance:get_id(BattlemapInstance)}, + BattlemapInstance + ). + +fetch (DB, ObjectID) -> + io:format("~ndb_shim lookup: ~p.~n", [{DB, ObjectID}]), + case ets:lookup(db_shim, {DB, ObjectID}) of + [{_Key, Value}] -> {ok, Value}; + [] -> nothing + end. + +commit (DB, Owner, ObjectID, Value) -> + add_to_db({DB, ObjectID}, Value), + timed_cache:invalidate(DB, Owner, ObjectID). + +assert_session_is_valid (_PlayerID, _SessionToken) -> + % Ask PlayerID's login server if SessionToken is correct. + % If so, update last login time to prevent relogin within + % (database_timeout * 2). + % If not, crash. + ok. -- cgit v1.2.3-70-g09d2