summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/handler.erl | 4 | ||||
-rw-r--r-- | src/io/database_shim.erl | 10 | ||||
-rw-r--r-- | src/io/timed_cache.erl | 14 | ||||
-rw-r--r-- | src/io/timed_caches_manager.erl | 8 | ||||
-rw-r--r-- | src/query/character_turn.erl | 6 | ||||
-rw-r--r-- | src/query/load_state.erl | 6 | ||||
-rw-r--r-- | src/type/battlemap_instance.erl | 1 |
7 files changed, 30 insertions, 19 deletions
diff --git a/src/handler.erl b/src/handler.erl index afde8ae..15f9e5c 100644 --- a/src/handler.erl +++ b/src/handler.erl @@ -22,6 +22,6 @@ start (_YawsParams) -> gen_server:cast(Pid, {add, battlemap_db, none}), gen_server:cast(Pid, {add, battlemap_instance_db, none}), gen_server:cast(Pid, {add, character_db, none}), - gen_server:cast(Pid, {add, character_turn_db, none}), - gen_server:cast(Pid, {add, player_data_db, none}), +% gen_server:cast(Pid, {add, character_turn_db, none, character_turn:keypos()}), +% gen_server:cast(Pid, {add, player_data_db, none, player_data:keypos()}), ok. diff --git a/src/io/database_shim.erl b/src/io/database_shim.erl index 5ae6a62..0b9ea1c 100644 --- a/src/io/database_shim.erl +++ b/src/io/database_shim.erl @@ -12,7 +12,8 @@ [ generate_db/1, fetch/2, - commit/3 + commit/3, + assert_session_is_valid/2 ] ). @@ -100,3 +101,10 @@ fetch (DB, ObjectID) -> commit (DB, ObjectID, Value) -> add_to_db({DB, ObjectID}, Value), timed_cache:invalidate(DB, 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/timed_cache.erl b/src/io/timed_cache.erl index ec93a48..1b750b0 100644 --- a/src/io/timed_cache.erl +++ b/src/io/timed_cache.erl @@ -48,16 +48,13 @@ init ({DB, ObjectID}) -> {ok, {DB, ObjectID}}. handle_call (invalidate, _, State) -> - {stop, normal, State}; -handle_call (ping, _, {DB, ObjectID}) -> - {noreply, {DB, ObjectID}, timed_caches_manager:get_timeout(DB)}. + {stop, normal, State}. handle_cast (invalidate, State) -> - {stop, normal, State}; -handle_cast (ping, {DB, ObjectID}) -> - {noreply, {DB, ObjectID}, timed_caches_manager:get_timeout(DB)}. + {stop, normal, State}. terminate (_, {DB, ObjectID}) -> + io:format("~nCache entry timed out: ~p.~n", [{DB, ObjectID}]), ets:delete(DB, ObjectID). code_change (_, State, _) -> @@ -78,7 +75,6 @@ fetch (DB, ObjectID) -> [] -> add_to_cache(DB, ObjectID); [{_, TimerPID, Data}] -> - gen_server:cast(TimerPID, ping), Data end. @@ -89,3 +85,7 @@ invalidate (DB, ObjectID) -> [{_, TimerPID, _}] -> gen_server:stop(TimerPID) end. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Notes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/src/io/timed_caches_manager.erl b/src/io/timed_caches_manager.erl index aad7c37..21f2b6b 100644 --- a/src/io/timed_caches_manager.erl +++ b/src/io/timed_caches_manager.erl @@ -45,7 +45,7 @@ add_cache (DB, none) -> set, public, named_table, - {keypos, 2}, + {keypos, 1}, {read_concurrency, true}, {heir, none} ] @@ -58,7 +58,7 @@ add_cache (DB, Heir) -> set, public, named_table, - {keypos, 2}, + {keypos, 1}, {read_concurrency, true}, {heir, Heir, DB} ] @@ -139,7 +139,5 @@ add_cache (CacheList, DB, Heir) -> [DB|CacheList] end. -get_timeout(battlemap_db) -> - 60000; get_timeout(_) -> - 60000. + 300000. % 5min. diff --git a/src/query/character_turn.erl b/src/query/character_turn.erl index 392f632..f406efd 100644 --- a/src/query/character_turn.erl +++ b/src/query/character_turn.erl @@ -44,10 +44,12 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% parse_input (Req) -> JSONReqMap = jiffy:decode(Req, [return_maps]), + PlayerID = maps:get(<<"player_id">>, JSONReqMap), + SessionToken = maps:get(<<"session_token">>, JSONReqMap), + database_shim:assert_session_is_valid(PlayerID, SessionToken), #input { - session_token = maps:get(<<"session_token">>, JSONReqMap), - player_id = maps:get(<<"player_id">>, JSONReqMap), + player_id = PlayerID, battlemap_id = maps:get(<<"battlemap_id">>, JSONReqMap), instance_id = maps:get(<<"instance_id">>, JSONReqMap), char_id = maps:get(<<"char_id">>, JSONReqMap), diff --git a/src/query/load_state.erl b/src/query/load_state.erl index 1ffbbf8..9c28d2f 100644 --- a/src/query/load_state.erl +++ b/src/query/load_state.erl @@ -26,10 +26,12 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% parse_input (Req) -> JSONReqMap = jiffy:decode(Req, [return_maps]), + PlayerID = maps:get(<<"player_id">>, JSONReqMap), + SessionToken = maps:get(<<"session_token">>, JSONReqMap), + database_shim:assert_session_is_valid(PlayerID, SessionToken), #input { - session_token = maps:get(<<"session_token">>, JSONReqMap), - player_id = maps:get(<<"player_id">>, JSONReqMap), + player_id = PlayerID, battlemap_id = maps:get(<<"battlemap_id">>, JSONReqMap), instance_id = maps:get(<<"instance_id">>, JSONReqMap) }. diff --git a/src/type/battlemap_instance.erl b/src/type/battlemap_instance.erl index a4141d3..6a6fe3b 100644 --- a/src/type/battlemap_instance.erl +++ b/src/type/battlemap_instance.erl @@ -47,6 +47,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%% Accessors get_id (BattlemapInstance) -> BattlemapInstance#battlemap_instance.id. list_characters (BattlemapInstance) -> |