Packages
hangman_engine
0.1.71
0.1.73
0.1.72
0.1.71
0.1.70
0.1.69
0.1.68
0.1.67
0.1.66
0.1.65
0.1.64
0.1.63
0.1.62
0.1.61
0.1.60
0.1.59
0.1.58
0.1.57
0.1.56
0.1.55
0.1.54
0.1.53
0.1.52
0.1.51
0.1.50
0.1.48
0.1.47
0.1.46
0.1.45
0.1.44
0.1.43
0.1.42
0.1.41
0.1.40
0.1.39
0.1.38
0.1.37
0.1.36
0.1.35
0.1.34
0.1.33
0.1.31
0.1.30
0.1.29
0.1.28
Models the Hangman Game.
Current section
Files
Jump to
Current section
Files
lib/hangman/engine/game_recovery.ex
defmodule Hangman.Engine.GameRecovery do
@moduledoc """
Makes processes under the top supervisor fault-tolerant. If any crashes (or
is killed), it is immediately restarted and the system remains undisturbed.
"""
use GenServer
use PersistConfig
alias __MODULE__
alias Hangman.Engine.{DynGameSup, GameServer}
@ets get_env(:ets_name)
@spec start_link(term) :: GenServer.on_start()
def start_link(_init_arg = :ok),
do: GenServer.start_link(GameRecovery, :ok, name: GameRecovery)
## Private functions
@spec restart_servers :: :ok
defp restart_servers do
@ets
|> :ets.match_object({{GameServer, :_}, :_})
|> Enum.each(fn {{GameServer, game_name}, _game} ->
# Child may already be started...
DynamicSupervisor.start_child(DynGameSup, {GameServer, game_name})
end)
end
## Callbacks
@spec init(term) :: {:ok, term}
def init(_init_arg = :ok), do: {:ok, restart_servers()}
end