Add function for removing game from GameCoordinator
Some checks failed
Build & Test / nix-build (push) Failing after 18s
Some checks failed
Build & Test / nix-build (push) Failing after 18s
This commit is contained in:
parent
d63bd0a9b2
commit
4c5f0370a0
@ -21,6 +21,7 @@ defmodule Amethyst.GameCoordinator do
|
|||||||
The game coordinator is responsible for keeping track of active
|
The game coordinator is responsible for keeping track of active
|
||||||
instances of each game and can create new ones on demand.
|
instances of each game and can create new ones on demand.
|
||||||
"""
|
"""
|
||||||
|
require Logger
|
||||||
|
|
||||||
defmodule State do
|
defmodule State do
|
||||||
@moduledoc """
|
@moduledoc """
|
||||||
@ -73,6 +74,12 @@ defmodule Amethyst.GameCoordinator do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@impl true
|
||||||
|
def handle_cast({:remove, gid}, state) do
|
||||||
|
{games, state} = _remove(gid, state)
|
||||||
|
{:noreply, state}
|
||||||
|
end
|
||||||
|
|
||||||
@spec _create(atom(), State.t()) :: {Game.t(), State.t()}
|
@spec _create(atom(), State.t()) :: {Game.t(), State.t()}
|
||||||
defp _create(type, state) do
|
defp _create(type, state) do
|
||||||
# Create a DynamicSupervisor for this game
|
# Create a DynamicSupervisor for this game
|
||||||
@ -92,6 +99,7 @@ defmodule Amethyst.GameCoordinator do
|
|||||||
mod: type, refs: refs, opts: [], gid: state.gid
|
mod: type, refs: refs, opts: [], gid: state.gid
|
||||||
}
|
}
|
||||||
games = state.games |> Map.put(state.gid, game)
|
games = state.games |> Map.put(state.gid, game)
|
||||||
|
Logger.info("Created new game #{inspect(game)}")
|
||||||
{game, %State{gid: state.gid + 1, games: games}}
|
{game, %State{gid: state.gid + 1, games: games}}
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -102,6 +110,11 @@ defmodule Amethyst.GameCoordinator do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp _remove(gid, state) do
|
||||||
|
games = state.games |> Map.delete(gid)
|
||||||
|
{games, %State{state | games: games}}
|
||||||
|
end
|
||||||
|
|
||||||
def create(type) when is_atom(type) do
|
def create(type) when is_atom(type) do
|
||||||
GenServer.call({:global, __MODULE__}, {:create, type})
|
GenServer.call({:global, __MODULE__}, {:create, type})
|
||||||
end
|
end
|
||||||
@ -111,4 +124,7 @@ defmodule Amethyst.GameCoordinator do
|
|||||||
def find_or_create(type) when is_atom(type) do
|
def find_or_create(type) when is_atom(type) do
|
||||||
GenServer.call({:global, __MODULE__}, {:find_or_create, type})
|
GenServer.call({:global, __MODULE__}, {:find_or_create, type})
|
||||||
end
|
end
|
||||||
|
def remove(gid) when is_integer(gid) do
|
||||||
|
GenServer.cast({:global, __MODULE__}, {:remove, gid})
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user