簡單Elixir遊戲服設計-玩家進程跑起來

有了玩家模型,咱們試試讓玩家進程跑起來。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
player_supervisor.ex

搞個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
player_server.ex

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
player_supervisor_test.exs

下一章,咱們將解決玩家進程註冊的問題(如今玩家只能1個),若是隻是單服的話能夠用elixir 自帶的Registry。code

跨服的話用syn 或者gproc。server

因爲只是演示用(工做輕鬆點),因此我將用Registry。blog

同時game_server 是時候修改成應用啓動了。進程

相關文章
相關標籤/搜索