Packages
islands_text_client
0.2.13
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.Text.Client.RemoteProcedureCall do
use PersistConfig
alias __MODULE__.{
GameAlreadyStarted,
GameAlreadyUnderway,
GameNotStarted,
IslandsEngineNotStarted
}
alias IO.ANSI.Plus, as: ANSI
alias Islands.Engine.Game.Tally
alias Islands.Engine
@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.puts()
self() |> Process.exit(:normal)
{:badrpc, :nodedown} ->
IslandsEngineNotStarted.message(:nodedown) |> ANSI.puts()
self() |> Process.exit(:normal)
{:badrpc, {:EXIT, {:undef, _}}} ->
IslandsEngineNotStarted.message(:nodeup) |> ANSI.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.puts()
self() |> Process.exit(:normal)
{:badrpc, {:EXIT, {:noproc, _}}} ->
game_name |> GameNotStarted.message() |> ANSI.puts()
self() |> Process.exit(:normal)
{:badrpc, :nodedown} ->
IslandsEngineNotStarted.message(:nodedown) |> ANSI.puts()
self() |> Process.exit(:normal)
{:badrpc, {:EXIT, {:undef, _}}} ->
IslandsEngineNotStarted.message(:nodeup) |> ANSI.puts()
self() |> Process.exit(:normal)
error ->
exit(error)
end
end
end