有了玩家模型,咱們試試讓玩家進程跑起來。ide
須要搞個PlayerSupervisor來負責啓動和監控玩家進程。測試
defmodule PlayerSupervisor do use Supervisor def start_link(_opts) do Supervisor.start_link(__MODULE__, :ok, name: __MODULE__) end def init(:ok) do Supervisor.init([PlayerServer], strategy: :simple_one_for_one) end def start_player(player) do Supervisor.start_child(__MODULE__, [player]) end end
搞個PlayerServer來負責玩家進程。spa
defmodule PlayerServer do use GenServer, restart: :temporary, start: {__MODULE__, :start_link, []} def start_link(player) do GenServer.start_link(__MODULE__, player, name: __MODULE__) end def init(player) do {:ok, player} end end
plyaer_supervisor的測試代碼rest
defmodule PlayerSupervisorTest do use ExUnit.Case doctest PlayerSupervisor setup do start_supervised PlayerSupervisor %{} end test "測試PlayerSupervisor啓動PlayerServer" do assert {:ok, _player_pid} = PlayerSupervisor.start_player(Player.init) end end
下一章,咱們將解決玩家進程註冊的問題(如今玩家只能1個),若是隻是單服的話能夠用elixir 自帶的Registry。code
跨服的話用syn 或者gproc。server
因爲只是演示用(工做輕鬆點),因此我將用Registry。blog
同時game_server 是時候修改成應用啓動了。進程