Current section

Files

Jump to
islands_engine lib islands engine recover.ex
Raw

lib/islands/engine/recover.ex

defmodule Islands.Engine.Recover do
@moduledoc false
use GenServer
use PersistConfig
alias __MODULE__
alias Islands.Engine.{Server, Sup}
@ets Application.get_env(@app, :ets_name)
@spec start_link(term) :: GenServer.on_start()
def start_link(:ok), do: GenServer.start_link(Recover, :ok, name: Recover)
## Private functions
@spec restart_servers() :: :ok
defp restart_servers() do
@ets
|> :ets.match_object({{Server, :_}, :_})
|> Enum.each(fn {{Server, player1_name}, _game} ->
# Child may already be started...
DynamicSupervisor.start_child(Sup, {Server, player1_name})
end)
end
## Callbacks
@spec init(term) :: {:ok, :ok}
def init(:ok), do: {:ok, restart_servers()}
end