Current section
Files
Jump to
Current section
Files
lib/packet_handler/name_provider.ex
defmodule NetLogger.PacketHandler.NameProvider do
use GenServer
def via(identifier) do
{:via, __MODULE__, identifier}
end
def whereis_name(identifier) do
GenServer.call(__MODULE__, {:whereis_name, identifier})
end
def register_name(identifier, pid) do
GenServer.call(__MODULE__, {:register_name, identifier, pid})
end
def unregister_name(identifier) do
GenServer.call(__MODULE__, {:unregister_name, identifier})
end
def start_link(args) do
GenServer.start_link(__MODULE__, args, [name: __MODULE__])
end
def init([]) do
{:ok, %{}}
end
def handle_call({:whereis_name, id}, _, state) do
{:reply, Map.get(state, id) || :undefined, state}
end
def handle_call({:register_name, id, pid}, _, state) do
{:reply, :yes, Map.put(state, id, pid)}
end
def handle_call({:unregister_name, id}, _, state) do
if Map.get(state, id) do
{:reply, :yes, Map.delete(state, id)}
else
{:reply, :no, state}
end
end
end