summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2018-06-05 14:33:27 +0200
committernsensfel <SpamShield0@noot-noot.org>2018-06-05 14:33:27 +0200
commit983ed9d0e8da15cb8c304fea62c25d3b053e712b (patch)
tree71a2aa7618692abe46a7fb07c590995f97b56d97
parent25b3f31c8a451044459d104a3a36f919557b8d20 (diff)
Has the DB run as a separate node.
I am still figuring out how Erlang handles node connections... It would seem that spawn(NODE, ...) automatically initiates the connection to NODE (i.e. no need to use net_kernel:connect_node before).
-rw-r--r--Makefile9
-rw-r--r--src/db/Makefile8
-rw-r--r--src/db/src/db_node.erl31
-rw-r--r--src/db/src/struct/db_model.erl71
4 files changed, 115 insertions, 4 deletions
diff --git a/Makefile b/Makefile
index 1ac3973..8eabe6b 100644
--- a/Makefile
+++ b/Makefile
@@ -41,10 +41,11 @@ build:
$(MAKE) -C $$module build ; \
done
-run:
- for module in $(MODULES_SRC) ; do \
- $(MAKE) -C $$module run; \
- done
+run_battlemap:
+ $(MAKE) -C $(MODULES_DIR)/battlemap/ run
+
+run_db:
+ $(MAKE) -C $(MODULES_DIR)/db/ run
clean:
for module in $(MODULES_SRC) ; do \
diff --git a/src/db/Makefile b/src/db/Makefile
index d7b6eed..206a332 100644
--- a/src/db/Makefile
+++ b/src/db/Makefile
@@ -17,6 +17,13 @@ INCLUDE_DIR ?= ${CURDIR}/include
## Binaries
ERLC ?= erlc
ERLC_OPTS ?=
+ERL ?= erl
+ERL_OPTS ?= \
+ -connect_all false \
+ -name db_node \
+ -pa $(BIN_DIR) \
+ -run db_node start
+
DIALYZER ?= dialyzer
################################################################################
@@ -52,6 +59,7 @@ debug: debug_run
build: $(REQUIRED_HEADERS) $(PREPROCESSOR_RESULT) $(ERLANG_RESULT)
run:
+ $(ERL) $(ERL_OPTS)
clean:
rm -rf $(PREPROCESSOR_RESULT) $(ERLANG_RESULT)
diff --git a/src/db/src/db_node.erl b/src/db/src/db_node.erl
new file mode 100644
index 0000000..be295c6
--- /dev/null
+++ b/src/db/src/db_node.erl
@@ -0,0 +1,31 @@
+-module(db_node).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-export([start/0]).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec wait_for_stop () -> 'ok'.
+wait_for_stop () ->
+ receive
+ stop -> ok;
+ {ping, Pid} -> Pid ! pong;
+ _ -> wait_for_stop()
+ end.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec start () -> 'ok'.
+start () ->
+ DB = db_model:new(battle_db, "/tmp/battle_db.mnesia", []),
+ db_model:start(DB),
+ wait_for_stop(),
+ ok.
diff --git a/src/db/src/struct/db_model.erl b/src/db/src/struct/db_model.erl
new file mode 100644
index 0000000..0f8c872
--- /dev/null
+++ b/src/db/src/struct/db_model.erl
@@ -0,0 +1,71 @@
+-module(db_model).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-include("../../include/db_item.hrl").
+
+-record
+(
+ db_model,
+ {
+ name :: atom(),
+ store_file :: string(),
+ neighbors :: list(node())
+ }
+).
+
+-type type() :: #db_model{}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-export_type([type/0]).
+
+-export
+(
+ [
+ new/3,
+ start/1
+ ]
+).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec new (atom(), string(), list(node())) -> type().
+new (DBName, StorageFile, Neighbors) ->
+ #db_model
+ {
+ name = DBName,
+ store_file = StorageFile,
+ neighbors = Neighbors
+ }.
+
+start (Model) ->
+ DBName = Model#db_model.name,
+ StorageFile = Model#db_model.store_file,
+ Neighbors = Model#db_model.neighbors,
+
+ ok = application:set_env(mnesia, dir, StorageFile),
+ case mnesia:create_schema([node()|Neighbors]) of
+ {error, {Name, {already_exists, Name}}} -> ok;
+ ok -> ok
+ end,
+ ok = mnesia:start(),
+ mnesia:create_table
+ (
+ DBName,
+ [
+ {attributes, record_info(fields, db_item)},
+ {disc_copies, [node()|Neighbors]},
+ {disc_only_copies, []},
+ {ram_copies, []},
+ {type, ordered_set},
+ {local_content, false}
+ ]
+ ).