Packages
islands_text_client
0.1.42
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.57
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.26
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.14
0.2.13
0.2.12
0.2.11
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.99
0.1.98
0.1.97
0.1.96
0.1.95
0.1.94
0.1.93
0.1.91
0.1.90
0.1.89
0.1.88
0.1.87
0.1.86
0.1.85
0.1.84
0.1.83
0.1.82
0.1.81
0.1.80
0.1.79
0.1.78
0.1.77
0.1.76
0.1.75
0.1.74
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.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.3
0.1.2
0.1.1
0.1.0
Text client for the Game of Islands.
Current section
Files
Jump to
Current section
Files
lib/islands/text_client/remote_procedure_call.ex
defmodule Islands.TextClient.RemoteProcedureCall do
@moduledoc false
use PersistConfig
alias IO.ANSI.Plus, as: ANSI
alias Islands.Engine.Game.Tally
alias Islands.Engine
alias Islands.TextClient.Summary.Message.{
GameAlreadyStarted,
GameAlreadyUnderway,
GameNotStarted
}
@node Application.get_env(@app, :islands_node)
@spec new_game(String.t(), String.t()) :: String.t() | no_return
def new_game(game_name, player_name) do
Node.connect(@node)
:ok = :global.sync()
me = self()
case :rpc.call(@node, Engine, :new_game, [game_name, player_name, me]) do
{:ok, _pid} ->
game_name
{:error, {:already_started, _pid}} ->
game_name
|> GameAlreadyStarted.message()
|> ANSI.format()
|> IO.puts()
self() |> Process.exit(:normal)
error ->
exit(error)
end
end
@spec add_player(String.t(), String.t()) :: String.t() | no_return
def add_player(game_name, player_name) do
Node.connect(@node)
:ok = :global.sync()
me = self()
case :rpc.call(@node, Engine, :add_player, [game_name, player_name, me]) do
%Tally{response: {:ok, :player2_added}} ->
game_name
%Tally{response: {:error, :player2_already_added}} ->
game_name
|> GameAlreadyUnderway.message()
|> ANSI.format()
|> IO.puts()
self() |> Process.exit(:normal)
{:badrpc, {:EXIT, {:noproc, _}}} ->
game_name
|> GameNotStarted.message()
|> ANSI.format()
|> IO.puts()
self() |> Process.exit(:normal)
error ->
IO.inspect(error, label: "*** error ***")
exit(error)
end
end
end