defmodule Hangman.Runtime.Server do alias Hangman.Runtime.Watchdog alias Hangman.Impl.Game use GenServer @type t :: pid @idle_timeout 1 * 60 * 60 * 1000 def start_link(_) do GenServer.start_link(__MODULE__, nil) end def init(_) do watcher = Watchdog.start(@idle_timeout) {:ok, {Game.new_game(), watcher}} end def handle_call({:make_move, guess}, _from, { game, watcher }) do Watchdog.im_alive(watcher) {updated_game, tally} = Game.make_move(game, guess) {:reply, tally, {updated_game, watcher}} end def handle_call({:tally}, _from, { game, watcher }) do Watchdog.im_alive(watcher) {:reply, Game.tally(game), {game, watcher}} end end