%% @copyright 2014, Takeru Ohta %% %% @doc application root supervisor %% @private -module(local_sup). -behaviour(supervisor). %%---------------------------------------------------------------------------------------------------------------------- %% Exported API %%---------------------------------------------------------------------------------------------------------------------- -export([start_link/0]). -export([start_name_server/1]). -export([stop_name_server/1]). -export([which_name_servers/0]). %%---------------------------------------------------------------------------------------------------------------------- %% 'supervisor' Callback API %%---------------------------------------------------------------------------------------------------------------------- -export([init/1]). %%---------------------------------------------------------------------------------------------------------------------- %% Exported Functions %%---------------------------------------------------------------------------------------------------------------------- %% @doc Starts root supervisor -spec start_link() -> {ok, pid()} | {error, Reason::term()}. start_link() -> supervisor:start_link({local, ?MODULE}, ?MODULE, []). %% @doc Starts new local name server -spec start_name_server(local:name_server_name()) -> ok | {error, Reason} when Reason :: already_present. start_name_server(Name) -> case supervisor:start_child(?MODULE, local:name_server_child_spec(Name)) of {ok, _Pid} -> ok; {error, already_present} -> {error, already_present}; {error, {already_started, _}} -> {error, already_present}; Other -> error({unexpected_result, Other}, [Name]) end. %% @doc Stops the name server identified by `Name' -spec stop_name_server(local:name_server_name()) -> ok | {error, Reason} when Reason :: not_found. stop_name_server(Name) -> case supervisor:terminate_child(?MODULE, Name) of {error, not_found} -> {error, not_found}; ok -> ok = supervisor:delete_child(?MODULE, Name) end. %% @doc Returns a list of running name server -spec which_name_servers() -> [local:name_server_name()]. which_name_servers() -> [Id || {Id, _, _, _} <- supervisor:which_children(?MODULE)]. %%---------------------------------------------------------------------------------------------------------------------- %% 'supervisor' Callback Functions %%---------------------------------------------------------------------------------------------------------------------- %% @private init([]) -> {ok, { {one_for_one, 5, 10}, []} }.