Packages
islands_engine
0.2.34
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/server/error.ex
defmodule Islands.Engine.Server.Error do
alias Islands.Engine.Server
alias Islands.{Game, PlayerID, Request}
@player_turns [:player1_turn, :player2_turn]
@position_actions [:position_island, :position_all_islands]
@spec reply(atom, Game.t(), Request.t(), PlayerID.t()) :: Server.reply()
def reply(:set_islands, game, request, player_id) do
case game.state.game_state do
:initialized ->
reply(:player2_not_added, game, request, player_id)
state when state in @player_turns ->
reply(:both_players_islands_set, game, request, player_id)
:game_over ->
reply(:game_over, game, request, player_id)
end
end
def reply(:stop, game, request, player_id) do
case game.state.game_state do
:initialized ->
reply(:player2_not_added, game, request, player_id)
:players_set ->
reply(:not_both_players_islands_set, game, request, player_id)
:game_over ->
reply(:game_over, game, request, player_id)
end
end
def reply(:guess_coord, game, request, player_id) do
case game.state.game_state do
:initialized ->
reply(:player2_not_added, game, request, player_id)
:players_set ->
reply(:not_both_players_islands_set, game, request, player_id)
state when state in @player_turns ->
reply(:not_player_turn, game, request, player_id)
:game_over ->
reply(:game_over, game, request, player_id)
end
end
def reply(action, game, request, player_id)
when action in @position_actions do
case game.state.game_state do
:players_set ->
reply(:islands_already_set, game, request, player_id)
state when state in @player_turns ->
reply(:islands_already_set, game, request, player_id)
:game_over ->
reply(:game_over, game, request, player_id)
end
end
def reply(reason, game, request, player_id) do
game
|> Game.update_request(request)
|> Game.update_response({:error, reason})
|> Server.save()
|> Server.reply(player_id)
end
end