summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/battlemap')
-rw-r--r-- | src/battlemap/mk/yaws.mk | 3 | ||||
-rw-r--r-- | src/battlemap/src/handler.erl | 2 | ||||
-rw-r--r-- | src/battlemap/src/query/character_turn.erl | 12 | ||||
-rw-r--r-- | src/battlemap/src/shim/database_shim.erl | 66 | ||||
-rw-r--r-- | src/battlemap/src/struct/character_turn_update.erl | 6 | ||||
-rw-r--r-- | src/battlemap/src/struct/db_query.erl | 55 |
6 files changed, 55 insertions, 89 deletions
diff --git a/src/battlemap/mk/yaws.mk b/src/battlemap/mk/yaws.mk index eb120c1..a68edf2 100644 --- a/src/battlemap/mk/yaws.mk +++ b/src/battlemap/mk/yaws.mk @@ -5,6 +5,7 @@ YAWS_CONF ?= ${CURDIR}/yaws.conf YAWS_API_HEADER ?= /my/src/yaws/include/yaws_api.hrl YAWS ?= yaws +YAWS_OPTS ?= -name battlemap_node -erlarg "-connect_all false" ################################################################################ ## MAKEFILE MAGIC ############################################################## @@ -19,7 +20,7 @@ YAWS_API_HEADER ?= /my/src/yaws/include/yaws_api.hrl ## TARGET RULES ################################################################ ################################################################################ yaws_run: build $(WWW_DIR) $(LOG_DIR) - $(YAWS) --conf $(YAWS_CONF) + $(YAWS) --conf $(YAWS_CONF) $(YAWS_OPTS) ################################################################################ ## INTERNAL RULES ############################################################## diff --git a/src/battlemap/src/handler.erl b/src/battlemap/src/handler.erl index 0ecc8be..1b79b69 100644 --- a/src/battlemap/src/handler.erl +++ b/src/battlemap/src/handler.erl @@ -18,6 +18,6 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% start (_YawsParams) -> {ok, Pid} = timed_caches_manager:start(), - database_shim:generate_db(Pid), + database_shim:generate_db(), timed_caches_manager:new_cache(Pid, battle_db, none), ok. diff --git a/src/battlemap/src/query/character_turn.erl b/src/battlemap/src/query/character_turn.erl index a4b69a2..a10cda7 100644 --- a/src/battlemap/src/query/character_turn.erl +++ b/src/battlemap/src/query/character_turn.erl @@ -177,18 +177,12 @@ update_data (Data, Request) -> send_to_database (Update, Request) -> PlayerID = character_turn_request:get_player_id(Request), BattleID = character_turn_request:get_battle_id(Request), - Data = character_turn_update:get_data(Update), - Battle = character_turn_data:get_battle(Data), + Ops = character_turn_update:get_db(Update), + Query = db_query:new(battle_db, BattleID, {user, PlayerID}, Ops), % TODO: send queries to an actual DB... - database_shim:commit - ( - battle_db, - PlayerID, - BattleID, - Battle - ), + database_shim:commit(Query), ok. diff --git a/src/battlemap/src/shim/database_shim.erl b/src/battlemap/src/shim/database_shim.erl index cc653ad..c64105d 100644 --- a/src/battlemap/src/shim/database_shim.erl +++ b/src/battlemap/src/shim/database_shim.erl @@ -10,36 +10,17 @@ -export ( [ - generate_db/1, + generate_db/0, fetch/2, - commit/4 + commit/1 ] ). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec create_db (pid()) -> 'ok'. -create_db (_Heir) -> - ets:new - ( - db_shim, - [ - set, - public, - named_table, - {keypos, 1}, - {read_concurrency, true} - ] - ), - io:format("~ndb_shim ets created.~n"), - ok. - --spec add_to_db (any(), any()) -> 'ok'. -add_to_db (ID, Val) -> - io:format("~nadd to db_shim: ~p.~n", [{ID, Val}]), - ets:insert(db_shim, {ID, Val}), - ok. +get_db_node () -> + list_to_atom("db_node@" ++ net_adm:localhost()). -spec generate_random_characters ( @@ -122,13 +103,8 @@ generate_random_characters %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec generate_db (pid()) -> 'ok'. -generate_db (Heir) -> - Pid = self(), - spawn(fun () -> create_db(Heir), Pid ! ok, receive ok -> ok end end), - receive - ok -> ok - end, +-spec generate_db () -> 'ok'. +generate_db () -> BattlemapWidth = roll:between(16, 64), BattlemapHeight = roll:between(16, 64), Battlemap = battlemap:random(0, BattlemapWidth, BattlemapHeight), @@ -136,16 +112,26 @@ generate_db (Heir) -> PlayersAsList = [player:new(<<"0">>), player:new(<<"1">>)], Battle = battle:new(<<"0">>, PlayersAsList, Battlemap, Characters), - add_to_db({battle_db, <<"0">>}, Battle). + {atomic, ok} = + rpc:call + ( + get_db_node(), + storage_access, + insert, + [battle_db, <<"0">>, any, Battle] + ), + + ok. --spec fetch (atom(), any()) -> ({'ok', any()} | 'nothing'). +-spec fetch (atom(), any()) -> ({'ok', any()} | 'not_found'). 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. + {atomic, Reply} = + rpc:call(get_db_node(), storage_access, read, [DB, ObjectID]), + io:format("~ndb_shim:fetch(~p) -> ~p.~n", [{DB, ObjectID}, Reply]), + Reply. --spec commit (atom(), any(), any(), any()) -> 'ok'. -commit (DB, _Owner, ObjectID, Value) -> - add_to_db({DB, ObjectID}, Value). +-spec commit (db_query:type()) -> 'ok'. +commit (Query) -> + {atomic, ok} = rpc:call(get_db_node(), storage_access, query, [Query]), + io:format("~ndb_shim:commit(~p) -> ok.~n", [Query]), + ok. diff --git a/src/battlemap/src/struct/character_turn_update.erl b/src/battlemap/src/struct/character_turn_update.erl index a3aa819..07cb562 100644 --- a/src/battlemap/src/struct/character_turn_update.erl +++ b/src/battlemap/src/struct/character_turn_update.erl @@ -9,7 +9,7 @@ { data :: character_turn_data:type(), timeline :: list(any()), - db :: list(db_query:type()) + db :: list(db_query:op()) } ). @@ -57,7 +57,7 @@ get_data (Update) -> Update#type.data. -spec get_timeline (type()) -> list(any()). get_timeline (Update) -> Update#type.timeline. --spec get_db (type()) -> list(any()). +-spec get_db (type()) -> list(db_query:op()). get_db (Update) -> Update#type.db. -spec set_data (character_turn_data:type(), type()) -> type(). @@ -68,6 +68,6 @@ set_data (Data, Update) -> add_to_timeline (Item, Update) -> Update#type{ timeline = [turn_result:encode(Item)|Update#type.timeline] }. --spec add_to_db (db_query:type(), type()) -> type(). +-spec add_to_db (db_query:op(), type()) -> type(). add_to_db (Item, Update) -> Update#type{ db = [Item|Update#type.db] }. diff --git a/src/battlemap/src/struct/db_query.erl b/src/battlemap/src/struct/db_query.erl index bf4b0f3..5d1e8d2 100644 --- a/src/battlemap/src/struct/db_query.erl +++ b/src/battlemap/src/struct/db_query.erl @@ -3,45 +3,20 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% --record -( - set_field, - { - field :: non_neg_integer(), - value :: any() - } -). +-include("../../../db/include/db_query.hrl"). --record -( - add_to_field, - { - field :: non_neg_integer(), - values :: list(any()) - } -). - --record -( - update_indexed, - { - field :: non_neg_integer(), - ix :: non_neg_integer(), - update :: list(type()) - } -). - --opaque type() :: (#update_indexed{} | #set_field{} | #add_to_field{}). +-opaque op() :: db_query_op(). +-opaque type() :: db_query(). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --export_type([type/0]). +-export_type([type/0, op/0]). -export ( [ + new/4, set_field/2, add_to_field/2, update_indexed/3 @@ -55,11 +30,21 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec set_field (non_neg_integer(), any()) -> type(). +-spec new (atom(), any(), db_user:user(), list(op())) -> type(). +new (DBName, ObjectID, User, Ops) -> + #db_query + { + db = DBName, + id = ObjectID, + user = User, + ops = Ops + }. + +-spec set_field (non_neg_integer(), any()) -> op(). set_field (Field, Value) -> #set_field { field = Field, value = Value }. --spec add_to_field (non_neg_integer(), list(any())) -> type(). +-spec add_to_field (non_neg_integer(), list(any())) -> op(). add_to_field (Field, Values) -> #add_to_field { field = Field, values = Values }. @@ -67,8 +52,8 @@ add_to_field (Field, Values) -> ( non_neg_integer(), non_neg_integer(), - list(type()) + list(op()) ) - -> type(). + -> op(). update_indexed (Field, IX, Updates) -> - #update_indexed { field = Field, ix = IX, update = Updates}. + #update_indexed { field = Field, ix = IX, ops = Updates}. |