From 53abb3b4aa88ad8e6dbc237b35a843adb9286f58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20B=C3=B6hme?= Date: Fri, 9 Aug 2024 12:19:57 +0200 Subject: [PATCH] feat: add toy registry --- other/simple_registry.ex | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 other/simple_registry.ex diff --git a/other/simple_registry.ex b/other/simple_registry.ex new file mode 100644 index 0000000..ad4e505 --- /dev/null +++ b/other/simple_registry.ex @@ -0,0 +1,37 @@ +defmodule SimpleRegistry do + use GenServer + + def start_link do + GenServer.start_link(__MODULE__, nil, name: __MODULE__) + end + + def register(name) when is_atom(name) do + Process.link(Process.whereis(__MODULE__)) + + if :ets.insert_new(__MODULE__, {name, self()}) do + :ok + else + :error + end + end + + def whereis(name) when is_atom(name) do + case :ets.lookup(__MODULE__, name) do + [{^name, value}] -> value + [] -> nil + end + end + + @impl GenServer + def init(_) do + Process.flag(:trap_exit, true) + :ets.new(__MODULE__, [:named_table, :public]) + {:ok, nil} + end + + @impl GenServer + def handle_info({:EXIT, pid, _reason}, state) do + :ets.match_delete(__MODULE__, {:_, pid}) + {:noreply, state} + end +end