|
|
@@ -0,0 +1,44 @@
|
|
|
+defmodule GenReset.Tracker do
|
|
|
+ use GenServer
|
|
|
+ use GenReset
|
|
|
+
|
|
|
+ @initial_state []
|
|
|
+
|
|
|
+ def start_link(_args) do
|
|
|
+ GenServer.start_link(__MODULE__, nil, name: __MODULE__)
|
|
|
+ end
|
|
|
+
|
|
|
+ def init(_args) do
|
|
|
+ register_gen_reset(@initial_state)
|
|
|
+ {:ok, @initial_state}
|
|
|
+ end
|
|
|
+
|
|
|
+ def add(pid) do
|
|
|
+ GenServer.call(__MODULE__, {:add, pid})
|
|
|
+ end
|
|
|
+
|
|
|
+ def remove(pid) do
|
|
|
+ GenServer.call(__MODULE__, {:remove, pid})
|
|
|
+ end
|
|
|
+
|
|
|
+ def pids do
|
|
|
+ GenServer.call(__MODULE__, :pids)
|
|
|
+ end
|
|
|
+
|
|
|
+ def handle_call({:add, pid}, _from, state) do
|
|
|
+ Process.monitor(pid)
|
|
|
+ {:reply, :ok, state ++ [pid]}
|
|
|
+ end
|
|
|
+
|
|
|
+ def handle_call({:remove, pid}, _from, state) do
|
|
|
+ {:reply, :ok, state -- [pid]}
|
|
|
+ end
|
|
|
+
|
|
|
+ def handle_info({:DOWN, _ref, :process, object, _reason}, state) do
|
|
|
+ IO.puts "Received down message"
|
|
|
+ IO.inspect(object)
|
|
|
+ {:noreply, state -- [object]}
|
|
|
+ end
|
|
|
+
|
|
|
+ def handle_call(:pids, _from, state), do: {:reply, state, state}
|
|
|
+end
|