summaryrefslogtreecommitdiff |
diff options
author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2018-12-15 19:22:30 +0100 |
---|---|---|
committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2018-12-15 19:22:30 +0100 |
commit | d50ae4d7700c4cb083e907b3d3e4ee67b92a6459 (patch) | |
tree | 1a19779b083002f6e9a29f33b8f7ffdb06fa855e | |
parent | 2c3aa52b642858b85ba756df927ff5730f5ee73d (diff) |
Get debug to okay the src files.
-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.erl | 18 | ||||
-rw-r--r-- | src/db/logic/db_access.erl | 132 | ||||
-rw-r--r-- | src/db/struct/db_item_ids_manager.erl | 207 | ||||
-rw-r--r-- | src/db/struct/db_model.erl | 81 | ||||
-rw-r--r-- | src/shared/io/shr_database.erl | 158 | ||||
-rw-r--r-- | src/shared/io/shr_timed_cache.erl | 2 | ||||
-rw-r--r-- | src/shared/shr_janitor.erl | 2 | ||||
-rw-r--r-- | src/shared/struct/shr_db_item.erl | 96 | ||||
-rw-r--r-- | src/shared/struct/shr_db_query.erl | 241 | ||||
-rw-r--r-- | src/shared/struct/shr_db_user.erl | 39 | ||||
-rw-r--r-- | src/special/spe_map.erl | 4 | ||||
-rw-r--r-- | src/special/spe_player.erl | 17 |
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 ), |