summaryrefslogtreecommitdiff |
diff options
-rw-r--r-- | Makefile | 32 | ||||
-rw-r--r-- | conf/yaws.conf.m4 | 12 | ||||
-rw-r--r-- | src/battlemap/bm_handler.erl | 12 | ||||
-rw-r--r-- | src/battlemap/bm_shim.erl | 106 | ||||
-rw-r--r-- | src/shared/io/sh_database.erl | 118 | ||||
-rw-r--r-- | src/shared/io/sh_timed_caches_manager.erl | 2 |
6 files changed, 166 insertions, 116 deletions
@@ -11,15 +11,18 @@ INCLUDE_DIR ?= ${CURDIR}/include WWW_DIR ?= ${CURDIR}/www LOG_DIR ?= ${CURDIR}/log -## Binaries -YAWS ?= yaws -YAWS_OPTS ?= +## Local only? +ERL_NAME_VS_SNAME ?= -sname +## Binaries ERLC ?= erlc ERLC_OPTS ?= ERL ?= erl -ERL_OPTS ?= +ERL_OPTS ?= -connect_all false -pa $(BIN_DIR) + +YAWS ?= yaws +YAWS_OPTS ?= $(ERL_NAME_VS_SNAME) query_node -erlarg "$(ERL_OPTS)" DIALYZER ?= dialyzer DIALYZER_OPTS ?= @@ -30,6 +33,9 @@ M4_OPTS ?= ## Filenames DIALYZER_PLT_FILE ?= tacticians-server.plt +YAWS_CONFIG_FILE ?= $(CONFIG_DIR)/yaws.conf + + ################################################################################ ## MAKEFILE MAGIC ############################################################## ################################################################################ @@ -59,6 +65,16 @@ M4_EXEC = $(M4) $(M4_OPTS) ## SANITY CHECKS ############################################################### ################################################################################ + +################################################################################ +## PREPROCESSOR-VISIBLE MAKEFILE VARIABLES ##################################### +################################################################################ + +MAKEFILE_TO_M4 = \ + --define=__MAKEFILE_BIN_DIR=$(BIN_DIR) \ + --define=__MAKEFILE_LOG_DIR=$(LOG_DIR) \ + --define=__MAKEFILE_WWW_DIR=$(WWW_DIR) \ + --define=__MAKEFILE_INCLUDE_DIR=$(INCLUDE_DIR) ################################################################################ ## TARGET RULES ################################################################ ################################################################################ @@ -69,7 +85,11 @@ debug: debug_run build: $(OPTIONAL_DIRS) $(REQUIRED_HEADERS) \ $(PREPROCESSED_FILES) $(ERL_BIN_FILES) -run: yaws_run +run_db_node: build + $(ERL_EXEC) $(ERL_NAME_VS_SNAME) db_node -run db_node start + +run_query_node: build $(YAWS_CONFIG_FILE) + $(YAWS_EXEC) --conf $(YAWS_CONFIG_FILE) clean: # Preprocessor @@ -104,7 +124,7 @@ debug_run: endif $(PREPROCESSED_FILES): %: $(PREPROCESSOR_CONFIG_FILES) %.m4 - $(M4_EXEC) -P $^ > $@ + $(M4_EXEC) -P $(MAKEFILE_TO_M4) $^> $@ $(OPTIONAL_DIRS): %: mkdir -p $@ diff --git a/conf/yaws.conf.m4 b/conf/yaws.conf.m4 index 8a68f0b..3f5b36b 100644 --- a/conf/yaws.conf.m4 +++ b/conf/yaws.conf.m4 @@ -4,17 +4,17 @@ # This is the directory where all logfiles for # all virtual servers will be written. -logdir = __MODULE_LOG_DIR +logdir = __MAKEFILE_LOG_DIR # These are the paths to directories where additional # beam code can be placed. The daemon will add these # directories to its search path. -ebin_dir = __MODULE_BIN_DIR +ebin_dir = __MAKEFILE_BIN_DIR # This is a directory where application specific .hrl # files can be placed. Application-specific .yaws code can # then include these .hrl files. -include_dir = __MODULE_INCLUDE_DIR +include_dir = __MAKEFILE_INCLUDE_DIR # Set this to an integer value to control # max number of connections from clients into the server. @@ -108,8 +108,8 @@ keepalive_timeout = 30000 <server *> port = 8000 listen = 0.0.0.0 - docroot = __MODULE_WWW_DIR + docroot = __MAKEFILE_WWW_DIR auth_log = true - appmods = __MODULE_APP_MODS - start_mod = handler + appmods = bm_character_turn bm_load_state + start_mod = bm_handler </server> diff --git a/src/battlemap/bm_handler.erl b/src/battlemap/bm_handler.erl index 09659e9..d355ea1 100644 --- a/src/battlemap/bm_handler.erl +++ b/src/battlemap/bm_handler.erl @@ -18,6 +18,16 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% start (_YawsParams) -> {ok, Pid} = sh_timed_caches_manager:start(), - bm_database_shim:generate_db(), + case sh_database:fetch(battle_db, <<"0">>) of + {ok, _} -> ok; + not_found -> + sh_database:insert + ( + battle_db, + <<"0">>, + any, + bm_shim:generate_random_battle() + ) + end, sh_timed_caches_manager:new_cache(Pid, battle_db, none), ok. diff --git a/src/battlemap/bm_shim.erl b/src/battlemap/bm_shim.erl new file mode 100644 index 0000000..3789ed0 --- /dev/null +++ b/src/battlemap/bm_shim.erl @@ -0,0 +1,106 @@ +-module(bm_shim). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export([generate_random_battle/0 ]). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +-spec generate_random_characters + ( + non_neg_integer(), + non_neg_integer(), + non_neg_integer(), + non_neg_integer(), + bm_battlemap:type(), + list(bm_location:type()), + list(bm_character:type()) + ) + -> list(bm_character:type()). +generate_random_characters +( + 0, + 0, + _CharactersPerPlayer, + _TotalCharacterCount, + _Battlemap, + _ForbiddenLocations, + Result +) -> + Result; +generate_random_characters +( + MaxPlayerID, + 0, + CharactersPerPlayer, + TotalCharacterCount, + Battlemap, + ForbiddenLocations, + Result +) -> + generate_random_characters + ( + (MaxPlayerID - 1), + CharactersPerPlayer, + CharactersPerPlayer, + TotalCharacterCount, + Battlemap, + ForbiddenLocations, + Result + ); +generate_random_characters +( + MaxPlayerID, + PlayerCharacterCount, + CharactersPerPlayer, + TotalCharacterCount, + Battlemap, + ForbiddenLocations, + Result +) -> + NewCharacter = + bm_character:random + ( + TotalCharacterCount, + list_to_binary(integer_to_list(MaxPlayerID)), + bm_battlemap:get_width(Battlemap), + bm_battlemap:get_height(Battlemap), + ForbiddenLocations + ), + Character = + case MaxPlayerID of + 0 -> bm_character:set_is_active(true, NewCharacter); + _ -> NewCharacter + end, + + generate_random_characters + ( + MaxPlayerID, + (PlayerCharacterCount - 1), + CharactersPerPlayer, + (TotalCharacterCount + 1), + Battlemap, + [bm_character:get_location(Character)|ForbiddenLocations], + [Character|Result] + ). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec generate_random_battle () -> bm_battle:type(). +generate_random_battle () -> + BattlemapWidth = sh_roll:between(16, 64), + BattlemapHeight = sh_roll:between(16, 64), + Battlemap = bm_battlemap:random(0, BattlemapWidth, BattlemapHeight), + Characters = generate_random_characters(1, 8, 8, 0, Battlemap, [], []), + PlayersAsList = [bm_player:new(<<"0">>), bm_player:new(<<"1">>)], + Battle = bm_battle:new(<<"0">>, PlayersAsList, Battlemap, Characters), + + Battle. diff --git a/src/shared/io/sh_database.erl b/src/shared/io/sh_database.erl index 5fa791f..8b52f9e 100644 --- a/src/shared/io/sh_database.erl +++ b/src/shared/io/sh_database.erl @@ -10,7 +10,7 @@ -export ( [ - generate_db/0, + insert/4, fetch/2, commit/1 ] @@ -19,119 +19,33 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -get_db_node () -> - list_to_atom("db_node@" ++ net_adm:localhost()). +get_db_node () -> list_to_atom("db_node@" ++ net_adm:localhost()). --spec generate_random_characters - ( - non_neg_integer(), - non_neg_integer(), - non_neg_integer(), - non_neg_integer(), - bm_battlemap:type(), - list(bm_location:type()), - list(bm_character:type()) - ) - -> list(bm_character:type()). -generate_random_characters -( - 0, - 0, - _CharactersPerPlayer, - _TotalCharacterCount, - _Battlemap, - _ForbiddenLocations, - Result -) -> - Result; -generate_random_characters -( - MaxPlayerID, - 0, - CharactersPerPlayer, - TotalCharacterCount, - Battlemap, - ForbiddenLocations, - Result -) -> - generate_random_characters - ( - (MaxPlayerID - 1), - CharactersPerPlayer, - CharactersPerPlayer, - TotalCharacterCount, - Battlemap, - ForbiddenLocations, - Result - ); -generate_random_characters -( - MaxPlayerID, - PlayerCharacterCount, - CharactersPerPlayer, - TotalCharacterCount, - Battlemap, - ForbiddenLocations, - Result -) -> - NewCharacter = - bm_character:random - ( - TotalCharacterCount, - list_to_binary(integer_to_list(MaxPlayerID)), - bm_battlemap:get_width(Battlemap), - bm_battlemap:get_height(Battlemap), - ForbiddenLocations - ), - Character = - case MaxPlayerID of - 0 -> bm_character:set_is_active(true, NewCharacter); - _ -> NewCharacter - end, - - generate_random_characters - ( - MaxPlayerID, - (PlayerCharacterCount - 1), - CharactersPerPlayer, - (TotalCharacterCount + 1), - Battlemap, - [bm_character:get_location(Character)|ForbiddenLocations], - [Character|Result] - ). +do_remote_operation (Op, Params) -> + rpc:call(get_db_node(), db_access, Op, Params). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec generate_db () -> 'ok'. -generate_db () -> - BattlemapWidth = sh_roll:between(16, 64), - BattlemapHeight = sh_roll:between(16, 64), - Battlemap = bm_battlemap:random(0, BattlemapWidth, BattlemapHeight), - Characters = generate_random_characters(1, 8, 8, 0, Battlemap, [], []), - PlayersAsList = [bm_player:new(<<"0">>), bm_player:new(<<"1">>)], - Battle = bm_battle:new(<<"0">>, PlayersAsList, Battlemap, Characters), - - {atomic, ok} = - rpc:call - ( - get_db_node(), - storage_access, - insert, - [battle_db, <<"0">>, any, Battle] - ), +-spec insert (atom(), any(), sh_db_user:permission(), any()) -> 'ok'. +insert (DB, ObjectID, Permission, Value) -> + {atomic, _} = do_remote_operation(insert, [DB, ObjectID, Permission, Value]), + io:format + ( + "~nsh_database:insert(~p) -> ok.~n", + [{DB, ObjectID, Permission, Value}] + ), ok. -spec fetch (atom(), any()) -> ({'ok', any()} | 'not_found'). fetch (DB, ObjectID) -> - {atomic, Reply} = - rpc:call(get_db_node(), storage_access, read, [DB, ObjectID]), - io:format("~ndb_shim:fetch(~p) -> ~p.~n", [{DB, ObjectID}, Reply]), + {atomic, Reply} = do_remote_operation(read, [DB, ObjectID]), + io:format("~nsh_database:fetch(~p) -> ~p.~n", [{DB, ObjectID}, Reply]), Reply. -spec commit (sh_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]), + {atomic, ok} = do_remote_operation(query, [Query]), + io:format("~nsh_database:commit(~p) -> ok.~n", [Query]), ok. diff --git a/src/shared/io/sh_timed_caches_manager.erl b/src/shared/io/sh_timed_caches_manager.erl index 7921552..ea92c08 100644 --- a/src/shared/io/sh_timed_caches_manager.erl +++ b/src/shared/io/sh_timed_caches_manager.erl @@ -140,7 +140,7 @@ handle_info(_, State) -> %%%% Interface Functions start () -> - gen_server:start(timed_caches_manager, [], []). + gen_server:start(?MODULE, [], []). new_cache (ManagerPid, DB, Heir) -> gen_server:cast(ManagerPid, {add, DB, Heir}). |