快捷搜索:

【方块游戏】玩家进程注册

日期:2019-10-08编辑作者:方块游戏

上回说用Registry 做本地注册(跨过服务器能够用syn,只是有一点麻烦点,必要效法global注册机制,写个包裹模块)。

修改game_server 项目标mix.exs, 扩大应用运营

  def application do
    [
      extra_applications: [:logger],
      mod: {GameServer, []}
    ]
  end

修改game_server.ex 达成,如下应用的监察树监禁PlayerRegistry进度和PlayerSupervisor。这里能够思考:one_for_rest 选项,因为PlayerRegistry 挂了, 大概系统都玩不下去。

defmodule GameServer do
  use Application
  def start(_type, _args) do
    children = [
      {Registry, keys: :unique, name: PlayerRegistry},
      PlayerSupervisor
    ]
    Supervisor.start_link(children, strategy: :one_for_one)
  end
end

修改player_server.ex

方块游戏 1方块游戏 2

defmodule PlayerServer do
    use GenServer, restart: :temporary, start: {__MODULE__, :start_link, []}

    def start_link(player) do
        GenServer.start_link(__MODULE__, player, name: register_name(player))
      end

    def init(player) do
        {:ok, player}
    end

    def register_name(%{} = player), do: register_name(player |> Player.get_id)
    def register_name(id), do: {:via, Registry, {PlayerRegistry, id}}
end

player_方块游戏,server.ex

修改测验

方块游戏 3方块游戏 4

defmodule PlayerSupervisorTest do
    use ExUnit.Case
    doctest PlayerSupervisor

    setup do
        Application.stop(GameServer)
        Application.start(GameServer)
        %{}
    end

    test "测试PlayerSupervisor启动PlayerServer" do
        assert {:ok, p1} = PlayerSupervisor.start_player(Player.init |> Player.set_id(1))
        assert {:ok, p2} = PlayerSupervisor.start_player(Player.init |> Player.set_id(2))
        assert [{^p1, nil}] = Registry.lookup(PlayerRegistry, 1)
        assert [{^p2, nil}] = Registry.lookup(PlayerRegistry, 2)
    end

end

player_supervisor_test.exs

 

本文由澳门新普京发布于方块游戏,转载请注明出处:【方块游戏】玩家进程注册

关键词:

正义的谋杀

写在前方, 这篇小说字数一共2.8万,分了2篇,在文章最末尾有链接跳转。 认真读书差不离需求1个小时。 你只要明天...

详细>>

夏天的雨

  平素在等一场阵雨,像回想中这种雨。 起风了,从前满眼的紧俏,居然就那么一下子被吹的清洁。阿婆拉着嗓门呼...

详细>>

为什么日本的小孩从小就被要求做整理收纳

生活中很多人因为当了妈妈,有了宝宝之后,就无法做整理了。因为“熊孩子”时不时就会来捣乱,增加整理收纳难...

详细>>

桌子和座位

建模桌子和座位 代码比较短小,直接贴吧。 model 里新建simple_table.ex 和 seat.ex, 项目里新增对应的test. 座位部分...

详细>>