summaryrefslogtreecommitdiff
path: root/lib/chessh/ssh/client/game/game.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/chessh/ssh/client/game/game.ex')
-rw-r--r--lib/chessh/ssh/client/game/game.ex67
1 files changed, 30 insertions, 37 deletions
diff --git a/lib/chessh/ssh/client/game/game.ex b/lib/chessh/ssh/client/game/game.ex
index 65b9d10..9dbde7f 100644
--- a/lib/chessh/ssh/client/game/game.ex
+++ b/lib/chessh/ssh/client/game/game.ex
@@ -291,6 +291,8 @@ defmodule Chessh.SSH.Client.Game do
},
promotion
) do
+ game = Repo.get(Game, game_id)
+
attempted_move =
if(flipped,
do: "#{Renderer.to_chess_coord(flip(from))}#{Renderer.to_chess_coord(flip(to))}",
@@ -298,8 +300,6 @@ defmodule Chessh.SSH.Client.Game do
) <>
if(promotion, do: promotion, else: "")
- game = Repo.get(Game, game_id)
-
case :binbo.move(
binbo_pid,
attempted_move
@@ -307,42 +307,19 @@ defmodule Chessh.SSH.Client.Game do
{:ok, status} ->
{:ok, fen} = :binbo.get_fen(binbo_pid)
- default_changeset = %{
- fen: fen,
- moves: game.moves + 1,
- turn: if(game.turn == :dark, do: :light, else: :dark)
- }
-
- case status do
- :continue ->
- {:ok, _new_game} =
- Game.changeset(
- game,
- default_changeset
- )
- |> Repo.update()
-
- {:draw, _} ->
- Game.changeset(
- game,
- Map.merge(default_changeset, %{status: :draw})
+ {:ok, _new_game} =
+ game
+ |> Game.changeset(
+ Map.merge(
+ %{
+ fen: fen,
+ moves: game.moves + 1,
+ turn: if(game.turn == :dark, do: :light, else: :dark)
+ },
+ changeset_from_status(status)
)
- |> Repo.update()
-
- {:checkmate, :white_wins} ->
- Game.changeset(
- game,
- Map.merge(default_changeset, %{status: :winner, winner: :light})
- )
- |> Repo.update()
-
- {:checkmate, :black_wins} ->
- Game.changeset(
- game,
- Map.merge(default_changeset, %{status: :winner, winner: :dark})
- )
- |> Repo.update()
- end
+ )
+ |> Repo.update()
:syn.publish(:games, {:game, game_id}, {:new_move, attempted_move})
@@ -367,4 +344,20 @@ defmodule Chessh.SSH.Client.Game do
) do
Renderer.render_board_state(fen, state)
end
+
+ defp changeset_from_status(game_status) do
+ case game_status do
+ :continue ->
+ %{}
+
+ {:draw, _} ->
+ %{status: :draw}
+
+ {:checkmate, :white_wins} ->
+ %{status: :winner, winner: :light}
+
+ {:checkmate, :black_wins} ->
+ %{status: :winner, winner: :dark}
+ end
+ end
end