summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battle/query/btl_join.erl.next (renamed from src/battle/query/btl_join.erl)0
-rw-r--r--src/db/db_node.erl18
-rw-r--r--src/db/logic/db_access.erl132
-rw-r--r--src/db/struct/db_item_ids_manager.erl207
-rw-r--r--src/db/struct/db_model.erl81
-rw-r--r--src/shared/io/shr_database.erl158
-rw-r--r--src/shared/io/shr_timed_cache.erl2
-rw-r--r--src/shared/shr_janitor.erl2
-rw-r--r--src/shared/struct/shr_db_item.erl96
-rw-r--r--src/shared/struct/shr_db_query.erl241
-rw-r--r--src/shared/struct/shr_db_user.erl39
-rw-r--r--src/special/spe_map.erl4
-rw-r--r--src/special/spe_player.erl17
13 files changed, 23 insertions, 974 deletions
diff --git a/src/battle/query/btl_join.erl b/src/battle/query/btl_join.erl.next
index 3ab7be8..3ab7be8 100644
--- a/src/battle/query/btl_join.erl
+++ b/src/battle/query/btl_join.erl.next
diff --git a/src/db/db_node.erl b/src/db/db_node.erl
index 30a29e2..763653a 100644
--- a/src/db/db_node.erl
+++ b/src/db/db_node.erl
@@ -25,16 +25,16 @@ wait_for_stop () ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec start () -> 'ok'.
start () ->
- Mnesia = db_model:new("/tmp/to_db_node.mnesia", []),
- db_model:start(Mnesia),
- db_model:add_db(battle_db, Mnesia),
- db_model:add_db(login_db, Mnesia),
- db_model:add_db(map_db, Mnesia),
- db_model:add_db(player_db, Mnesia),
- db_model:add_db(roster_db, Mnesia),
- db_model:add_db(inventory_db, Mnesia),
+ Mnesia = ataxia_admin:new("/tmp/to_db_node.mnesia", []),
+ ataxia_admin:start(Mnesia),
+ ataxia_admin:add_db(battle_db, Mnesia),
+ ataxia_admin:add_db(login_db, Mnesia),
+ ataxia_admin:add_db(map_db, Mnesia),
+ ataxia_admin:add_db(player_db, Mnesia),
+ ataxia_admin:add_db(roster_db, Mnesia),
+ ataxia_admin:add_db(inventory_db, Mnesia),
- ok = db_item_ids_manager:start(),
+ ok = ataxia_id_manager:start(),
wait_for_stop(),
ok.
diff --git a/src/db/logic/db_access.erl b/src/db/logic/db_access.erl
deleted file mode 100644
index 39019a6..0000000
--- a/src/db/logic/db_access.erl
+++ /dev/null
@@ -1,132 +0,0 @@
--module(db_access).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export
-(
- [
- read/3,
- remove/3,
- reserve/3,
- insert_at/5,
- insert/4,
- query/1
- ]
-).
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
--spec query_transaction (shr_db_query:type()) -> 'ok'.
-query_transaction (Query) ->
- DB = shr_db_query:get_database(Query),
- ID = shr_db_query:get_entry_id(Query),
- [Item] = mnesia:read(DB, ID),
- {ok, UpdatedItem} = shr_db_query:apply_to(Query, Item),
-
- mnesia:write(DB, UpdatedItem, sticky_write),
-
- ok.
-
--spec add_new_item (atom(), shr_db_item:type()) -> 'ok'.
-add_new_item (DB, Item) ->
- ID = shr_db_item:get_id(Item),
- [] = mnesia:read(DB, ID),
-
- mnesia:write(DB, Item, sticky_write),
-
- ok.
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec read
- (
- atom(),
- binary(),
- shr_db_user:user()
- )
- -> ({'aborted', any()} | {'atomic', ({'ok', any()} | 'not_found')}).
-read (DB, ID, Cred) ->
- case mnesia:transaction(fun mnesia:read/2, [DB, ID]) of
- {'atomic', []} -> {'atomic', 'not_found'};
- {'atomic', [Item]} ->
- true =
- shr_db_user:can_access
- (
- shr_db_item:get_read_permission(Item),
- Cred
- ),
- {'atomic', {ok, shr_db_item:get_value(Item)}};
-
- Other -> {'aborted', Other}
- end.
-
--spec insert_at
- (
- atom(),
- binary(),
- shr_db_user:permission(),
- shr_db_user:permission(),
- any())
- -> ({'aborted', any()} | {'atomic', 'ok'}).
-insert_at (DB, ID, ReadPerm, WritePerm, Value) ->
- Item = shr_db_item:new(ID, ReadPerm, WritePerm, Value),
- mnesia:transaction(fun add_new_item/2, [DB, Item]).
-
--spec insert
- (
- atom(),
- shr_db_user:permission(),
- shr_db_user:permission(),
- any())
- -> ({'aborted', any()} | {'atomic', {'ok', binary()}}).
-insert (DB, ReadPerm, WritePerm, Value) ->
- ID = db_item_ids_manager:allocate(DB),
- case insert_at(DB, ID, ReadPerm, WritePerm, Value) of
- {'atomic', 'ok'} -> {'atomic', {'ok', ID}};
- {aborted, Val} -> {aborted, Val}
- end.
-
--spec query (shr_db_query:type()) -> ({'aborted', any()} | {'atomic', 'ok'}).
-query (Query) ->
- mnesia:transaction(fun query_transaction/1, [Query]).
-
--spec reserve
- (
- atom(),
- binary(),
- shr_db_user:user()
- )
- -> ({'aborted', any()} | {'atomic', 'ok'}).
-reserve (DB, ID, Cred) ->
- insert_at
- (
- DB,
- ID,
- [Cred],
- [Cred],
- {
- reserved,
- <<"?">> %% TODO [FUNCTION: db][LOW]: timestamp
- }
- ).
-
--spec remove
- (
- atom(),
- binary(),
- shr_db_user:user()
- )
- -> ({'aborted', any()} | {'atomic', ({'ok', any()} | 'not_found')}).
-remove (_DB, _ID, _Cred) ->
- %% TODO [FUNCTION: db][MEDIUM]: unimplemented
- %% Don't forget to checkt that Cred has write access before removing the
- %% value.
- {'aborted', 'unimplemented'}.
diff --git a/src/db/struct/db_item_ids_manager.erl b/src/db/struct/db_item_ids_manager.erl
deleted file mode 100644
index e2af8a6..0000000
--- a/src/db/struct/db_item_ids_manager.erl
+++ /dev/null
@@ -1,207 +0,0 @@
--module(db_item_ids_manager).
--behavior(gen_server).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--record
-(
- entry,
- {
- last_id :: binary(),
- freed_ids :: list(binary())
- }
-).
-
--type entry() :: #entry{}.
-
-%% FIXME: IDs should be generated in a decentralized fashion.
-%% TODO: How to handle IDs management with the redundancy DBs?
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% 'gen_server' Exports
--export
-(
- [
- init/1,
- handle_cast/2,
- handle_call/3, %% No reply will ever be given.
- terminate/2,
- code_change/3,
- format_status/2,
- handle_info/2
- ]
-).
-
-%%%% Actual Interface
--export
-(
- [
- allocate/1,
- free/2,
- start/0
- ]
-).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec next_char (integer()) -> integer().
-next_char ($9) -> $a;
-next_char ($z) -> $A;
-next_char ($Z) -> $0;
-next_char (C) -> (C + 1).
-
--spec next_id_internal
- (
- list(integer()),
- boolean(),
- list(integer())
- )
- -> list(integer()).
-next_id_internal ([], true, Result) -> [$0|Result];
-next_id_internal ([], false, Result) -> Result;
-next_id_internal ([$Z|Next], true, Result) ->
- next_id_internal(Next, true, [$0|Result]);
-next_id_internal ([Char|Next], true, Result) ->
- next_id_internal(Next, false, [next_char(Char)|Result]);
-next_id_internal ([Char|Next], false, Result) ->
- next_id_internal(Next, false, [Char|Result]).
-
--spec next_id (binary()) -> binary().
-next_id (ID) ->
- list_to_binary
- (
- next_id_internal
- (
- lists:reverse(binary:bin_to_list(ID)),
- true,
- []
- )
- ).
-
--spec new_entry () -> entry().
-new_entry () ->
- #entry
- {
- last_id = <<"">>,
- freed_ids = []
- }.
-
--spec allocate_id_in_entry (entry()) -> {entry(), binary()}.
-allocate_id_in_entry (Entry) ->
- case Entry#entry.freed_ids of
- [] ->
- NewID = next_id(Entry#entry.last_id),
- {
- Entry#entry{ last_id = NewID },
- NewID
- };
-
- [OldID|OtherOldIDs] ->
- {
- Entry#entry{ freed_ids = OtherOldIDs },
- OldID
- }
- end.
-
--spec allocate_id
- (
- atom(),
- dict:dict(atom(), entry())
- )
- -> {dict:dict(atom(), entry()), binary()}.
-allocate_id (DB, State) ->
- S0Entry =
- case dict:find(DB, State) of
- {ok, Value} -> Value;
- error -> new_entry()
- end,
-
- {S1Entry, NewID} = allocate_id_in_entry(S0Entry),
-
- S0State = dict:store(DB, S1Entry, State),
-
- {S0State, NewID}.
-
--spec free_id
- (
- binary(),
- atom(),
- dict:dict(atom(), entry())
- )
- -> dict:dict(atom(), entry()).
-free_id (ID, DB, State) ->
- Entry =
- case dict:find(DB, State) of
- {ok, Value} -> Value;
- error -> new_entry()
- end,
-
- EntryFreedIDs = Entry#entry.freed_ids,
-
- case lists:member(ID, EntryFreedIDs) of
- true -> State;
- false ->
- Result =
- dict:store
- (
- DB,
- Entry#entry{ freed_ids = [ID|EntryFreedIDs] },
- State
- ),
-
- Result
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% 'gen_server' functions
-init (_) -> {ok, dict:new()}.
-
-handle_call ({allocate, DB}, _, State) ->
- {NewState, NewID} = allocate_id(DB, State),
- {reply, {allocated_id, NewID}, NewState};
-handle_call ({free, ID, DB}, _, State) ->
- {noreply, free_id(ID, DB, State)}.
-
-handle_cast ({allocate, _DB}, State) ->
- {noreply, State};
-handle_cast ({free, ID, DB}, State) ->
- {noreply, free_id(ID, DB, State)}.
-
-terminate (_, _) -> ok.
-
-code_change (_, State, _) ->
- {ok, State}.
-
-format_status (_, [_, State]) ->
- [{data, [{"State", State}]}].
-
-handle_info(_, State) ->
- {noreply, State}.
-
-%%%% Interface Functions
--spec allocate (atom()) -> binary().
-allocate (DB) ->
- {allocated_id, Result} =
- gen_server:call({global, db_item_ids_manager}, {allocate, DB}),
-
- io:format("~n[DB: ~p] Item ID ~p allocated.~n", [DB, Result]),
-
- Result.
-
--spec free (binary(), atom()) -> 'ok'.
-free (ID, DB) ->
- gen_server:cast({global, db_item_ids_manager}, {free, ID, DB}),
-
- ok.
-
--spec start () -> 'ok'.
-start () ->
- {ok, _} = gen_server:start({global, db_item_ids_manager}, ?MODULE, none, []),
-
- ok.
diff --git a/src/db/struct/db_model.erl b/src/db/struct/db_model.erl
deleted file mode 100644
index 2cd58d4..0000000
--- a/src/db/struct/db_model.erl
+++ /dev/null
@@ -1,81 +0,0 @@
--module(db_model).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
--record
-(
- db_model,
- {
- store_file :: string(),
- neighbors :: list(node())
- }
-).
-
--type type() :: #db_model{}.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export_type([type/0]).
-
--export
-(
- [
- new/2,
- add_db/2,
- start/1
- ]
-).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec new (string(), list(node())) -> type().
-new (StorageFile, Neighbors) ->
- #db_model
- {
- store_file = StorageFile,
- neighbors = Neighbors
- }.
-
--spec start(type()) -> 'ok'.
-start (Model) ->
- 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(),
-
- ok.
-
--spec add_db (atom(), type()) -> 'ok'.
-add_db (DBName, Model) ->
- Neighbors = Model#db_model.neighbors,
-
- mnesia:create_table
- (
- DBName,
- [
- {record_name, shr_db_item:get_record_name()},
- {attributes, shr_db_item:get_record_info()},
- {disc_copies, [node()|Neighbors]},
- {disc_only_copies, []},
- {ram_copies, []},
- {type, ordered_set},
- {local_content, false}
- ]
- ),
-
- ok.
diff --git a/src/shared/io/shr_database.erl b/src/shared/io/shr_database.erl
deleted file mode 100644
index c1792dc..0000000
--- a/src/shared/io/shr_database.erl
+++ /dev/null
@@ -1,158 +0,0 @@
--module(shr_database).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export
-(
- [
- insert_at/5,
- insert/4,
- remove/3,
- fetch/3,
- reserve/3,
- commit/1
- ]
-).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec get_debug_db_node () -> node().
-get_debug_db_node () -> list_to_atom("db_node@" ++ net_adm:localhost()).
-
--spec get_random_db_node () -> node().
-get_random_db_node () ->
- get_debug_db_node().
-
--spec get_db_node_for (binary()) -> node().
-get_db_node_for (_ObjectID) ->
- get_debug_db_node().
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec insert_at
- (
- atom(),
- binary(),
- shr_db_user:permission(),
- shr_db_user:permission(),
- any()
- )
- -> 'ok'.
-insert_at (DB, ObjectID, ReadPerm, WritePerm, Value) ->
- DBNode = get_db_node_for(ObjectID),
-
- {atomic, _} =
- rpc:call
- (
- DBNode,
- db_access,
- insert_at,
- [DB, ObjectID, ReadPerm, WritePerm, Value]
- ),
-
- io:format
- (
- "~nshr_database:insert_at(~p) ! ~p -> ok.~n",
- [{DB, ObjectID, ReadPerm, WritePerm, Value}, DBNode]
- ),
-
- ok.
-
--spec insert
- (
- atom(),
- shr_db_user:permission(),
- shr_db_user:permission(),
- any()
- )
- -> {'ok', binary()}.
-insert (DB, ReadPerm, WritePerm, Value) ->
- DBNode = get_random_db_node(),
-
- {atomic, {ok, ID}} =
- rpc:call(DBNode, db_access, insert, [DB, ReadPerm, WritePerm, Value]),
-
- io:format
- (
- "~nshr_database:insert(~p) ! ~p -> ok.~n",
- [{DB, ReadPerm, WritePerm, Value}, DBNode]
- ),
-
- {ok, ID}.
-
--spec fetch
- (
- atom(),
- binary(),
- shr_db_user:user()
- )
- -> ({'ok', any()} | 'not_found').
-fetch (DB, ObjectID, Cred) ->
- DBNode = get_db_node_for(ObjectID),
-
- {atomic, Reply} = rpc:call(DBNode, db_access, read, [DB, ObjectID, Cred]),
-
- io:format
- (
- "~nshr_database:fetch(~p) ! ~p -> ~p.~n",
- [{DB, ObjectID, Cred}, DBNode, Reply]
- ),
-
- Reply.
-
--spec commit (shr_db_query:type()) -> 'ok'.
-commit (Query) ->
- DBNode = get_db_node_for(shr_db_query:get_entry_id(Query)),
-
- {atomic, ok} = rpc:call(DBNode, db_access, query, [Query]),
-
- io:format("~nshr_database:commit(~p) ! ~p -> ok.~n", [Query, DBNode]),
-
- ok.
-
--spec remove
- (
- atom(),
- binary(),
- shr_db_user:user()
- )
- -> ('ok' | 'not_found').
-remove (DB, ObjectID, Cred) ->
- DBNode = get_db_node_for(ObjectID),
-
- {atomic, _} = rpc:call(DBNode, db_access, remove, [DB, ObjectID, Cred]),
-
- io:format
- (
- "~nshr_database:remove(~p) ! ~p -> ok.~n",
- [{DB, ObjectID, Cred}, DBNode]
- ),
-
- ok.
-
--spec reserve
- (
- atom(),
- binary(),
- shr_db_user:user()
- )
- -> ('ok' | 'not_found').
-reserve (DB, ObjectID, Cred) ->
- DBNode = get_db_node_for(ObjectID),
-
- {atomic, _} = rpc:call(DBNode, db_access, reserve, [DB, ObjectID, Cred]),
-
- io:format
- (
- "~nshr_database:reserve(~p) ! ~p -> ok.~n",
- [{DB, ObjectID, Cred}, DBNode]
- ),
-
- ok.
diff --git a/src/shared/io/shr_timed_cache.erl b/src/shared/io/shr_timed_cache.erl
index de3d094..ff6e13d 100644
--- a/src/shared/io/shr_timed_cache.erl
+++ b/src/shared/io/shr_timed_cache.erl
@@ -38,7 +38,7 @@
-spec add_to_cache (atom(), any(), any()) -> any().
add_to_cache (DB, Owner, ObjectID) ->
{ok, TimerPID} = gen_server:start(?MODULE, {DB, {Owner, ObjectID}}, []),
- {ok, Data} = shr_database:fetch(DB, ObjectID, Owner),
+ {ok, Data} = ataxia_client:fetch(DB, Owner, ObjectID),
ets:insert(DB, {{Owner, ObjectID}, TimerPID, Data}),
Data.
diff --git a/src/shared/shr_janitor.erl b/src/shared/shr_janitor.erl
index 097a729..05df18a 100644
--- a/src/shared/shr_janitor.erl
+++ b/src/shared/shr_janitor.erl
@@ -22,7 +22,7 @@ core (DB, ItemID) ->
receive
after
60000 ->
- shr_database:remove(DB, ItemID, janitor)
+ ataxia_client:remove(DB, ataxia_security:janitor(), ItemID)
end.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/src/shared/struct/shr_db_item.erl b/src/shared/struct/shr_db_item.erl
deleted file mode 100644
index 417e772..0000000
--- a/src/shared/struct/shr_db_item.erl
+++ /dev/null
@@ -1,96 +0,0 @@
--module(shr_db_item).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--record
-(
- db_item,
- {
- id :: any(),
- read_perm :: shr_db_user:permission(),
- write_perm :: shr_db_user:permission(),
- val :: any()
- }
-).
-
--type db_item() :: #db_item{}.
-
--type type() :: db_item().
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export_type([type/0]).
-
--export
-(
- [
- new/4,
-
- get_id/1,
- get_read_permission/1,
- get_write_permission/1,
- get_value/1,
-
- set_read_permission/2,
- set_write_permission/2,
- set_value/2,
-
- get_id_field/0,
- get_record_info/0,
- get_record_name/0
- ]
-).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec new
- (
- any(),
- shr_db_user:permission(),
- shr_db_user:permission(),
- any()
- ) -> type().
-new (ID, ReadPermission, WritePermission, Value) ->
- #db_item
- {
- id = ID,
- read_perm = ReadPermission,
- write_perm = WritePermission,
- val = Value
- }.
-
--spec get_id (type()) -> any().
-get_id (#db_item { id = Result }) -> Result.
-
--spec get_read_permission (type()) -> shr_db_user:permission().
-get_read_permission (#db_item { read_perm = Result }) -> Result.
-
--spec get_write_permission (type()) -> shr_db_user:permission().
-get_write_permission (#db_item { write_perm = Result }) -> Result.
-
--spec get_value (type()) -> any().
-get_value (#db_item { val = Result }) -> Result.
-
--spec set_read_permission (shr_db_user:permission(), type()) -> type().
-set_read_permission (Perm, Item) -> Item#db_item{ read_perm = Perm }.
-
--spec set_write_permission (shr_db_user:permission(), type()) -> type().
-set_write_permission (Perm, Item) -> Item#db_item{ write_perm = Perm }.
-
--spec set_value (any(), type()) -> type().
-set_value (Value, Item) -> Item#db_item{ val = Value }.
-
--spec get_id_field () -> non_neg_integer().
-get_id_field () -> #db_item.id.
-
-get_record_info () -> record_info(fields, db_item).
-
-get_record_name () -> db_item.
-
diff --git a/src/shared/struct/shr_db_query.erl b/src/shared/struct/shr_db_query.erl
deleted file mode 100644
index af8b080..0000000
--- a/src/shared/struct/shr_db_query.erl
+++ /dev/null
@@ -1,241 +0,0 @@
--module(shr_db_query).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--record
-(
- set_field,
- {
- field :: non_neg_integer(),
- value :: any()
- }
-).
-
--record
-(
- add_to_field,
- {
- field :: non_neg_integer(),
- values :: list(any()),
- head :: boolean()
- }
-).
-
--record
-(
- update_indexed,
- {
- field :: non_neg_integer(),
- ix :: non_neg_integer(),
- ops :: list(db_query_op())
- }
-).
-
--record
-(
- set_read_perm,
- {
- perm :: shr_db_user:permission()
- }
-).
-
--record
-(
- set_write_perm,
- {
- perm :: shr_db_user:permission()
- }
-).
-
--record
-(
- set_val,
- {
- val :: any()
- }
-).
-
--record
-(
- db_query,
- {
- db :: atom(),
- id :: any(),
- user :: shr_db_user:user(),
- ops :: list(db_query_master_op())
- }
-).
-
--type db_query_op() ::
- (#set_field{} | #add_to_field{} | #update_indexed{} | #set_val{}).
--type db_query_master_op() ::
- (db_query_op() | #set_read_perm{} | #set_write_perm{}).
-
--type db_query() :: #db_query{}.
-
--type op() :: db_query_master_op().
--type type() :: db_query().
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export_type([type/0, op/0]).
-
--export
-(
- [
- new/4,
- set_field/2,
- add_to_field/3,
- update_indexed/3,
- set_value/1,
- set_read_permission/1,
- set_write_permission/1
- ]
-).
--export
-(
- [
- get_database/1,
- get_entry_id/1
- ]
-).
--export([apply_to/2]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec get_user (db_query()) -> shr_db_user:user().
-get_user (#db_query{ user = Result }) -> Result.
-
--spec apply_update_indexed (#update_indexed{}, any()) -> any().
-apply_update_indexed (Op, Elem) ->
- FieldNumber = Op#update_indexed.field,
- IX = Op#update_indexed.ix,
- Ops = Op#update_indexed.ops,
-
- IndexedFieldValue = element(FieldNumber, Elem),
- ArrayValue = array:get(IX, IndexedFieldValue),
- UpdatedArrayValue = lists:foldl(fun apply_op_to/2, ArrayValue, Ops),
- UpdatedIndexedFieldValue =
- array:set(IX, UpdatedArrayValue, IndexedFieldValue),
-
- setelement(FieldNumber, Elem, UpdatedIndexedFieldValue).
-
--spec apply_add_to_field (#add_to_field{}, any()) -> any().
-apply_add_to_field (Op, Elem) ->
- FieldNumber = Op#add_to_field.field,
- NewValues = Op#add_to_field.values,
- AddToHead = Op#add_to_field.head,
-
- CurrentValues = element(FieldNumber, Elem),
- UpdatedValues =
- case AddToHead of
- true -> (NewValues ++ CurrentValues);
- _ -> (CurrentValues ++ NewValues)
- end,
-
- setelement(FieldNumber, Elem, UpdatedValues).
-
--spec apply_set_field (#set_field{}, any()) -> any().
-apply_set_field (Op, Elem) ->
- FieldNumber = Op#set_field.field,
- NewValue = Op#set_field.value,
-
- setelement(FieldNumber, Elem, NewValue).
-
--spec apply_op_to (db_query_op(), any()) -> any().
-apply_op_to (Op, Elem) when is_record(Op, set_field) ->
- apply_set_field(Op, Elem);
-apply_op_to (MOp, _Elem) when is_record(MOp, set_val) ->
- NewVal = MOp#set_val.val,
- NewVal;
-apply_op_to (Op, Elem) when is_record(Op, add_to_field) ->
- apply_add_to_field(Op, Elem);
-apply_op_to (Op, Elem) when is_record(Op, update_indexed) ->
- apply_update_indexed(Op, Elem).
-
--spec apply_master_op_to
- (
- db_query_master_op(),
- shr_db_item:type()
- )
- -> shr_db_item:type().
-apply_master_op_to (MOp, Elem) when is_record(MOp, set_read_perm) ->
- NewPerm = MOp#set_read_perm.perm,
-
- shr_db_item:set_read_permission(NewPerm, Elem);
-apply_master_op_to (MOp, Elem) when is_record(MOp, set_write_perm) ->
- NewPerm = MOp#set_write_perm.perm,
-
- shr_db_item:set_write_permission(NewPerm, Elem);
-apply_master_op_to (MOp, Elem) ->
- OldValue = shr_db_item:get_value(Elem),
- NewValue = apply_op_to(MOp, OldValue),
-
- shr_db_item:set_value(NewValue, Elem).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec new (atom(), any(), shr_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 set_value (any()) -> op().
-set_value (Value) -> #set_val { val= Value }.
-
--spec set_read_permission (shr_db_user:permission()) -> op().
-set_read_permission (Perm) -> #set_read_perm { perm = Perm }.
-
--spec set_write_permission (shr_db_user:permission()) -> op().
-set_write_permission (Perm) -> #set_write_perm { perm = Perm }.
-
--spec add_to_field (non_neg_integer(), list(any()), boolean()) -> op().
-add_to_field (Field, Values, IsPrefix) ->
- #add_to_field { field = Field, values = Values, head = IsPrefix}.
-
--spec update_indexed
- (
- non_neg_integer(),
- non_neg_integer(),
- list(op())
- )
- -> op().
-update_indexed (Field, IX, Updates) ->
- #update_indexed { field = Field, ix = IX, ops = Updates}.
-
--spec get_database (db_query()) -> atom().
-get_database (#db_query{ db = Result }) -> Result.
-
--spec get_entry_id (db_query()) -> any().
-get_entry_id (#db_query{ id = Result }) -> Result.
-
--spec apply_to
- (
- db_query(),
- shr_db_item:type()
- )
- -> ({'ok', shr_db_item:type()} | 'error').
-apply_to (DBQuery, DBItem) ->
- ObjectWPerm = shr_db_item:get_write_permission(DBItem),
- User = get_user(DBQuery),
-
- io:format("~p accessing obj with ~p perm.~n", [User, ObjectWPerm]),
-
- true = shr_db_user:can_access (ObjectWPerm, User),
-
- MOps = DBQuery#db_query.ops,
- {ok, lists:foldl(fun apply_master_op_to/2, DBItem, MOps)}.
-
diff --git a/src/shared/struct/shr_db_user.erl b/src/shared/struct/shr_db_user.erl
deleted file mode 100644
index dcd8685..0000000
--- a/src/shared/struct/shr_db_user.erl
+++ /dev/null
@@ -1,39 +0,0 @@
--module(shr_db_user).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--type db_named_user() :: {'user', any()}.
--type db_user() :: (db_named_user() | 'admin' | 'any' | 'janitor').
--type db_permission() :: (list(db_named_user()) | 'any' | 'janitor').
-
-
--type user() :: db_user().
--type permission() :: db_permission().
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export_type([user/0, permission/0]).
-
--export([can_access/2, player/1]).
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec player (shr_player:id()) -> db_user().
-player (ID) -> {user, ID}.
-
--spec can_access (permission(), user()) -> boolean().
-can_access (_, admin) -> true;
-can_access (any, _) -> true;
-can_access (janitor, janitor) -> true;
-can_access (List, {user, User}) ->
- lists:member({user, User}, List);
-can_access (List, janitor) ->
- lists:member(janitor, List);
-can_access (List, User) ->
- can_access(List, {user, User}).
diff --git a/src/special/spe_map.erl b/src/special/spe_map.erl
index dbd6c3e..afb5647 100644
--- a/src/special/spe_map.erl
+++ b/src/special/spe_map.erl
@@ -24,8 +24,8 @@ grant_additional (OwnerID) ->
ataxia_client:add
(
map_db,
- ataxia_security:only_allow(ataxia_security:any()),
- ataxia_security:only_allow(ataxia_security:user_from_id(OwnerID)),
+ ataxia_security:allow_only(ataxia_security:any()),
+ ataxia_security:allow_only(ataxia_security:user_from_id(OwnerID)),
Map
),
diff --git a/src/special/spe_player.erl b/src/special/spe_player.erl
index 65c651c..0d35c7d 100644
--- a/src/special/spe_player.erl
+++ b/src/special/spe_player.erl
@@ -28,9 +28,12 @@ finalize_login (UsernameLC, EmailLC, PlayerID) ->
ataxic:sequence_meta
(
[
- ataxic:value(ataxic:constant(PlayerID)),
- ataxic:read_permission(ataxic:constant(ataxia_security:any())),
- ataxic:write_permission
+ ataxic:update_value(ataxic:constant(PlayerID)),
+ ataxic:update_read_permission
+ (
+ ataxic:constant(ataxia_security:any())
+ ),
+ ataxic:update_write_permission
(
ataxic:constant([ataxia_security:user_from_id(PlayerID)])
)
@@ -65,8 +68,8 @@ generate_inventory (PlayerID) ->
ataxia_client:add
(
inventory_db,
- ataxia_security:any(),
- [ataxia_security:user_from_id(PlayerID)],
+ ataxia_security:allow_only(ataxia_security:any()),
+ ataxia_security:allow_only(ataxia_security:user_from_id(PlayerID)),
Inventory
),
@@ -79,8 +82,8 @@ generate_roster (PlayerID) ->
ataxia_client:add
(
roster_db,
- ataxia_security:any(),
- [ataxia_security:user_from_id(PlayerID)],
+ ataxia_security:allow_only(ataxia_security:any()),
+ ataxia_security:allow_only(ataxia_security:user_from_id(PlayerID)),
Roster
),