失踪——我们在逃离什么

“当一艘船沉入海底
当一个人成了谜
您不知情
她俩为啥离开
这声再见竟是他最后的一句”
 
邓紫棋的《后会无期》唱出了失踪的最高境界。

像Player进程这样扩大TableServer代表桌子进程

有一本小书很风趣,叫《完全失踪手册》,作者樫村政则是个东瀛人,曾经当过私家侦探,他以暗访的工作经验,写了这本失踪手册。这不是一本开玩笑的书,真的一招一式的教您怎么样从熟练的环境中流失,叫外人找不到您。听上去很不正能量的感觉到,是教人躲债、逃情,欠钱不还,做个负心汉吗?

追加TableSupervisor监控TableServer。使用同一个Registry,因而名字也改成LocalRegistry了。

说到失踪,我们脑子里第一个联想到的词汇就是“灾难”,比如空难、海难、地震,要不就是被绑架了,总而言之是天灾人祸、凶多吉少,这种是一心违背当事人意愿的消极失踪。第二个能联想到的词汇就是“逃离”,欠人钱太多,债主每日上门讨债,受不了,脚底抹油跑了,亦或逃避情债,人家对你爱的死去活来,而你倍感空间太少,或者还有正房不可能摒弃,于是玩失踪。

从而Registry的起步代码,以及原来PlayerServer的register_name要做多少修改。

凄美的失踪是大体意义上的失踪,失踪的干净程度足以达成从地球上着实消失。逃离性失踪是有针对性的失踪,只是为了躲开某些人,跟躲猫猫一样,而当事人的地位、社会角色并不曾改变,对于另外大部份非逃离对像而言,逃离者仍会以二伯、岳母、丈夫、妻子、老董或员工的身份偷偷出现在他们前边。

本来你也得以采用2个例外的Registry,但也许就要加进一个RegstrySupervisor 去start_child了,

《完全失踪手册》带领的是根本的积极性失踪,当然不是疏堵你自杀这种不负责任的做法。它教你什么退出现在的环境,叫所有认识您的人都找不到您,甚至变换地点,失踪数周、数月、数年,或余生。在余生都失踪,对于认识您的人的话,同死亡也没怎么区别了。那本书90%的情节都在介绍一些走失的神妙手段及注意事项,男人和女性的失踪要点不一致,学生和成长的失踪格局也有分别,可以说是失踪界的人心手册。但出于它是90年代的书,其中一些手段放在现今的互联网时代,恐怕已经不行了。而且内部的地方辨别格局,也是依据扶桑的国情来写,对于中国人的话,细节不便效仿。

又或者手动启动2个(更加不指出)。

假设这本书就止于前方90%的情节,这对于老百姓来说,它最多就是一本好玩的小册子,在自我天朝,还会被盖上三观不正的封印,就算删掉里面把在青楼的劳作也真是一种失踪手段的始末。

新的game_server.ex

对本人而言,精髓的局部在前边10%——尾声那一章。前边的情节反映的都是暗访家的工作能力,前面这小部份是笔者对失踪真正含义的思维。

图片 1图片 2

咱俩为啥要失踪?我们在逃离什么?

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

对于刚出生的婴孩来说,是从未有过失踪的急需的,相反,失踪对他来说就是不幸。他刚入世,假诺有轮回的话,说不定他正往日世的凄美失踪投胎到现世。他索要爸爸大姑的关爱,需要与这个世界开展连接。

game_server.ex

一经把人与人里面的连接比作一张网,那么每个人的出世都是这一个网中的一个结点。伴随着一个人的成长,这么些结点可以联网的任何结点会尤其多。你的走动不能独善其身,因为网的另一端牵挂着他、她和它,不管是家人朋友、同事同学,仍旧金钱地位……。在不同的TA面前,你要以不同的面貌出现,就像参加化妆晚会,上司,下属,情人,好老公,装外孙子,装大叔?前天打算戴哪个面具出现吗?在A面唯唯诺诺低三下四,在B面前指点江山意气风发,你打死都不倚重A会认得B,但当A和B同时在您前边出现,你会如何是好呢?

PlayerServer 的register_name 应该按table_server 这样修改,那样明晰,并且也不会争持。

你会说成人的世界太复杂。可目前连稚气未脱的小学生都有戴面具的伤痛了。近年来几年,大家如故一再见到有关小学生自杀的报道,真难以想像,他们究竟背负着如何沉重的包袱,而宁愿牺牲自己的人命去换取从人间结网的解脱。

图片 3图片 4

一生下来我们就掉入了那张网,就像蚊子撞上了蜘蛛网,学业分数、名誉地位、亲情友情,在大家身上绑了又绑。对于生活在痛苦中的人的话,身份像一个桎梏将他桎梏。假使想更改,而又别无他法,何不尝试失踪呢?

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

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

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

    def register_name(%{} = table), do: register_name(table |> SimpleTable.get_id)
    def register_name(id), do: {:via, Registry, {LocalRegistry, {Table, id}}}

    def exist?(table) do
        key = {Table, table |> SimpleTable.get_id}
        case Registry.lookup(LocalRegistry, key) do
            [{_pid, _}] -> true
            [] -> false
        end
    end

end

走失不是假期。休假是很放松的事体,只是离开一个地点,我们都领悟您在何地,时间到了你还会安全回来。而失踪是一种决绝,时间上或者可以像休假一样,选拔短短的失踪五个星期,可是在心绪上是与过去活着一刀两断的,就像书中所说,不要期望失踪后再过回原来的生存。或许可以回到原来的地点,但回不去原来的园地。失踪,意味着你得接受失去一切,让原本熟知你的人感觉目瞪口呆,甚至不再“认识”你。

table_server.ex

书中很少有失踪后又主动再次回到原先位置的例子。失踪短短期又出现的境况,大部份是被暗访、警察找到,或在他乡不小心被熟人会晤。

新增了exist? 判断函数,以后会有用呢。

的确想失踪的人是终生都不想被人发现的。失踪是一件很庄严的事情,它对您的亲属及生活的相撞,在我看来,你得把它看做是稍差于死亡的消失事件。

标准上当玩家成立了一个牌局后,没解散在此以前不容许再创设(当然你可以改,我只是简化了)

决不失踪,当您觉得生活还有坚贞不屈的理由时,我想这是便于找到的,尤其是您的亲人,他们早就住进了你心中最柔软的一部分。世界上最了不起的作业,莫过于为爱遵从。假如你心如磐石,觉得这大千世界也远非什么样值得珍爱的人,那么要精通,磨难与挫折是成人的一片段,而且是多方面,这是在世赐予我们的局部,生活当然就是娱乐,磨难就是大家升级打怪的敌方,没有它们,我们的活着该多么的无趣啊。

table_supervisor 测试

但当您觉得生活已经把你逼上死角,天天夜间一关灯就祈祷不要天亮,身后总有一股无形的事物压得你喘可是气来时,或者您曾经在动脑筋死亡的礼仪,那么,为了给协调宝贵的身躯五次重生的机会,果断地去失踪吧。当死亡都不吓人时,还有咋样东西无法失去的吧?换个地点,换个名字,在另一个城池,归零。在这边,不要想着功名利禄,不要牵挂着什么人,因为你没资格,你唯一的目的就是生存,就像刚出生时这样,养活自己的躯体。做哪些工作?或者就从搬砖开首吧。

defmodule TableSupervisorTest do
    use ExUnit.Case
    doctest PlayerSupervisor

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

    test "测试TableSupervisor启动TableServer" do
        table1 = SimpleTable.init |> SimpleTable.set_id(1)
        table2 = SimpleTable.init |> SimpleTable.set_id(2)
        assert {:ok, _p1} = TableSupervisor.start_table(table1)
        assert {:ok, _p2} = TableSupervisor.start_table(table2)
        assert TableServer.exist?(table1)
        assert TableServer.exist?(table2)
    end
end

要牢记,你早已有了新的网,原来的网已经用不上了。

更改使用exist? 了

player_supervisor_test.exs 也照着修改。

编译测试ok。

代码变迁参看git吧。

他日我们由玩家成立牌局,一步步举行吧。

XXXX,想了下
上句话不对,成立这些跟玩法也不曾提到,先放着,直接起牌局玩才对。

XXXXX,上句看似也窘迫,本质上server进程只是转调用数据结构的操作,因而牌局玩法完全可以是数据结构的操作先。

故此下回我们一向操作数据,进行牌局。