32 lines
603 B
Elixir
32 lines
603 B
Elixir
|
defmodule Todo.Cache do
|
||
|
use GenServer
|
||
|
|
||
|
@impl GenServer
|
||
|
def init(_init_args) do
|
||
|
{:ok, %{}}
|
||
|
end
|
||
|
|
||
|
@impl GenServer
|
||
|
def handle_call({:server_process, name}, _from, state) do
|
||
|
case Map.fetch(state, name) do
|
||
|
{:ok, process} ->
|
||
|
{:reply, process, state}
|
||
|
|
||
|
:error ->
|
||
|
new_process = Todo.Server.start()
|
||
|
|
||
|
new_state = Map.put(state, name, new_process)
|
||
|
|
||
|
{:reply, new_process, new_state}
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def start() do
|
||
|
GenServer.start(__MODULE__, nil)
|
||
|
end
|
||
|
|
||
|
def server_process(pid, name) do
|
||
|
GenServer.call(pid, {:server_process, name})
|
||
|
end
|
||
|
end
|