Packages
islands_engine
0.1.45
0.2.65
0.2.64
0.2.63
0.2.62
0.2.61
0.2.60
0.2.59
0.2.58
0.2.56
0.2.55
0.2.54
0.2.53
0.2.52
0.2.51
0.2.50
0.2.49
0.2.48
0.2.47
0.2.46
0.2.45
0.2.44
0.2.43
0.2.42
0.2.41
0.2.40
0.2.39
0.2.38
0.2.37
0.2.36
0.2.35
0.2.34
0.2.33
0.2.32
0.2.31
0.2.30
0.2.29
0.2.28
0.2.27
0.2.25
0.2.24
0.2.23
0.2.22
0.2.21
0.2.20
0.2.19
0.2.18
0.2.17
0.2.16
0.2.15
0.2.13
0.2.12
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.81
0.1.80
0.1.79
0.1.78
0.1.77
0.1.76
0.1.75
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.49
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.32
0.1.31
0.1.30
0.1.29
0.1.28
0.1.27
0.1.26
0.1.25
0.1.24
0.1.23
0.1.22
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.0
Models the Game of Islands.
Current section
Files
Jump to
Current section
Files
lib/islands/engine/board/server.ex
defmodule Islands.Engine.Board.Server do
use GenServer
use PersistConfig
alias __MODULE__
alias Islands.Engine.Board
@typep from :: GenServer.from()
@board_set_path Application.get_env(@app, :board_set_path)
@spec start_link(term) :: GenServer.on_start()
def start_link(:ok), do: GenServer.start_link(Server, :ok, name: Server)
@spec persist_board(Board.t()) :: :ok
def persist_board(%Board{} = board),
do: GenServer.cast(Server, {:persist_board, board})
@spec restore_board :: Board.t()
def restore_board, do: GenServer.call(Server, :restore_board)
## Callbacks
@spec init(term) :: {:ok, term}
def init(:ok), do: {:ok, :ok}
@spec handle_cast(term, term) :: {:noreply, term}
def handle_cast({:persist_board, board}, :ok) do
:ok =
@board_set_path
|> File.write!(
case File.read(@board_set_path) do
{:ok, binary} -> :erlang.binary_to_term(binary)
{:error, _reason} -> MapSet.new()
end
|> MapSet.put(board)
|> :erlang.term_to_binary()
)
{:noreply, :ok}
end
@spec handle_call(term, from, term) :: {:reply, Board.t(), term}
def handle_call(:restore_board, _from, :ok) do
board =
@board_set_path
|> File.read!()
|> :erlang.binary_to_term()
|> MapSet.to_list()
|> Enum.random()
{:reply, board, :ok}
end
end