summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/handler.erl4
-rw-r--r--src/io/database_shim.erl10
-rw-r--r--src/io/timed_cache.erl14
-rw-r--r--src/io/timed_caches_manager.erl8
-rw-r--r--src/query/character_turn.erl6
-rw-r--r--src/query/load_state.erl6
-rw-r--r--src/type/battlemap_instance.erl1
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) ->