summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battlemap_character.erl30
-rw-r--r--src/battlemap_load_state.erl26
-rw-r--r--src/shim_battlemap_character.erl2
-rw-r--r--src/shim_database.erl12
-rw-r--r--src/timed_cache_object.erl30
5 files changed, 82 insertions, 18 deletions
diff --git a/src/battlemap_character.erl b/src/battlemap_character.erl
new file mode 100644
index 0000000..b831340
--- /dev/null
+++ b/src/battlemap_character.erl
@@ -0,0 +1,30 @@
+-module(battlemap_character).
+-export([encode_in_json/1]).
+
+encode_in_json (
+ {
+ ID,
+ Name,
+ Icon,
+ Portrait,
+ {X, Y},
+ Team,
+ MovementPoints,
+ AttackRange
+ }
+) ->
+ jiffy:encode(
+ {
+ [
+ {<<"id">>, ID},
+ {<<"name">>, Name},
+ {<<"icon">>, Icon},
+ {<<"portait">>, Portrait},
+ {<<"loc_x">>, X},
+ {<<"loc_y">>, Y},
+ {<<"team">>, Team},
+ {<<"mov_pts">>, MovementPoints},
+ {<<"atk_rg">>, AttackRange}
+ ]
+ }
+ ).
diff --git a/src/battlemap_load_state.erl b/src/battlemap_load_state.erl
index 3ebdd8b..e519886 100644
--- a/src/battlemap_load_state.erl
+++ b/src/battlemap_load_state.erl
@@ -10,16 +10,38 @@ handle (Req) ->
JSONReqMap = jiffy:decode(Req, [return_maps]),
BattlemapID = maps:get(<<"battlemap_id">>, JSONReqMap),
io:format("~nLoading Battlemap ~p...", [BattlemapID]),
- Battlemap = timed_cache_object:fetch(battlemaps_db, BattlemapID, 60000),
+ {Battlemap, CharList} =
+ timed_cache_object:fetch(
+ battlemaps_db,
+ BattlemapID
+ ),
%% ok = users_manager:ping(UserToken),
jiffy:encode(
{
[
- {<<"types">>, [<<"STATE">>]},
+ {
+ <<"types">>,
+ [
+ <<"SET_MAP">>,
+ lists:map(
+ fun (_Char) ->
+ <<"ADD_CHAR">>
+ end,
+ CharList
+ )
+ ]
+ },
{
<<"data">>,
[
battlemap_battlemap:encode_to_json(Battlemap)
+ |
+ lists:map(
+ fun (Char) ->
+ battlemap_character:encode_in_json(Char)
+ end,
+ CharList
+ )
]
}
]
diff --git a/src/shim_battlemap_character.erl b/src/shim_battlemap_character.erl
index f60566a..80e91b0 100644
--- a/src/shim_battlemap_character.erl
+++ b/src/shim_battlemap_character.erl
@@ -1,4 +1,4 @@
--module(shim_battlemap_battlemap).
+-module(shim_battlemap_character).
-export(
[
diff --git a/src/shim_database.erl b/src/shim_database.erl
new file mode 100644
index 0000000..237ff4d
--- /dev/null
+++ b/src/shim_database.erl
@@ -0,0 +1,12 @@
+-module(shim_database).
+-export([fetch/2]).
+
+fetch(battlemaps_db, _Object_ID) ->
+ Width = (rand:uniform(54) + 10),
+ Height = (rand:uniform(54) + 10),
+ {ok,
+ {
+ shim_battlemap_battlemap:generate(Width, Height),
+ shim_battlemap_character:generate(Width, Height)
+ }
+ }.
diff --git a/src/timed_cache_object.erl b/src/timed_cache_object.erl
index 1dd4b1a..80127d5 100644
--- a/src/timed_cache_object.erl
+++ b/src/timed_cache_object.erl
@@ -17,7 +17,7 @@
%%%% actual interface
-export(
[
- fetch/3,
+ fetch/2,
invalidate/2
]
).
@@ -25,9 +25,9 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% LOCAL %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-add_to_cache (DB, ObjectID, Timeout) ->
- {ok, TimerPID} = gen_server:start(?MODULE, [{DB, ObjectID, Timeout}], []),
- Data = nothing, %% Do the actual NoSQL Fetch here.
+add_to_cache (DB, ObjectID) ->
+ {ok, TimerPID} = gen_server:start(?MODULE, [{DB, ObjectID}], []),
+ {ok, Data} = shim_database:fetch(DB, ObjectID),
ets:insert(DB, {ObjectID, TimerPID, Data}),
Data.
@@ -36,20 +36,20 @@ add_to_cache (DB, ObjectID, Timeout) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% gen_server
-init ({DB, ObjectID, Timeout}) ->
- {ok, {DB, ObjectID, Timeout}}.
+init ({DB, ObjectID}) ->
+ {ok, {DB, ObjectID}}.
handle_call (invalidate, _, State) ->
{stop, normal, State};
-handle_call (ping, _, {DB, ObjectID, Timeout}) ->
- {noreply, {DB, ObjectID, Timeout}, Timeout}.
+handle_call (ping, _, {DB, ObjectID}) ->
+ {noreply, {DB, ObjectID}, timed_caches_manager:get_timeout(DB)}.
handle_cast (invalidate, State) ->
{stop, normal, State};
-handle_cast (ping, {DB, ObjectID, Timeout}) ->
- {noreply, {DB, ObjectID, Timeout}, Timeout}.
+handle_cast (ping, {DB, ObjectID}) ->
+ {noreply, {DB, ObjectID}, timed_caches_manager:get_timeout(DB)}.
-terminate (_, {DB, ObjectID, _Timeout}) ->
+terminate (_, {DB, ObjectID}) ->
ets:delete(DB, ObjectID).
code_change (_, State, _) ->
@@ -60,13 +60,13 @@ format_status (_, [_, State]) ->
handle_info(timeout, State) ->
{stop, normal, State};
-handle_info(_, {DB, ObjectID, Timeout}) ->
- {noreply, {DB, ObjectID, Timeout}, Timeout}.
+handle_info(_, {DB, ObjectID}) ->
+ {noreply, {DB, ObjectID}, timed_caches_manager:get_timeout(DB)}.
%%%% interface
-fetch (DB, ObjectID, Timeout) ->
+fetch (DB, ObjectID) ->
case ets:lookup(DB, ObjectID) of
- [] -> add_to_cache(DB, ObjectID, Timeout);
+ [] -> add_to_cache(DB, ObjectID);
[{_, TimerPID, Data}] ->
gen_server:cast(TimerPID, ping),