lib/pistis/server/process_cache.ex

defmodule Pistis.Server.ProcessCache do
  use DynamicSupervisor
  use Pistis.Core.Journal
  alias Pistis.Server.NameRegistry

  @me __MODULE__

  def boot(), do: Pistis.Core.Supervisor.supervise(@me)

  def start_link(init_arg \\ []) do
    DynamicSupervisor.start_link(@me, init_arg, name: @me)
  end

  def init(_init_arg), do: DynamicSupervisor.init(strategy: :one_for_one)

  def get_server_process() do
    case start_child(NameRegistry.random_server_name()) do
      {:ok, pid} -> pid
      {:error, {:already_started, pid}} -> pid
    end
  end

  defp start_child(server_name) do
    DynamicSupervisor.start_child(@me, {Pistis.Server.RequestHandler, server_name})
  end
end