From 5621bd5d513a2be44608f09f2b821e42387dd8f0 Mon Sep 17 00:00:00 2001 From: nsensfel Date: Fri, 10 Nov 2017 13:03:11 +0100 Subject: Still have to create the ETS tables... --- src/battlemap_character.erl | 30 ++++++++++++++++++++++++++++++ src/battlemap_load_state.erl | 26 ++++++++++++++++++++++++-- src/shim_battlemap_character.erl | 2 +- src/shim_database.erl | 12 ++++++++++++ src/timed_cache_object.erl | 30 +++++++++++++++--------------- 5 files changed, 82 insertions(+), 18 deletions(-) create mode 100644 src/battlemap_character.erl create mode 100644 src/shim_database.erl (limited to 'src') 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), -- cgit v1.2.3-70-g09d2