概要
paiza.ioでelixirやってみた。
Supervisor使ってみた。
参考にしたページ
サンプルコード
defmodule Counter.Server do
use GenServer
require Logger
def start_link(current_number) do
Logger.info "ok"
GenServer.start_link(__MODULE__, current_number, name: __MODULE__)
end
def count_up do
GenServer.call __MODULE__, :up
end
def count_down do
GenServer.cast __MODULE__, :down
end
def current_number do
GenServer.call __MODULE__, :current
end
def handle_call(:up, _from, current_number) do
{:reply, current_number + 1, current_number + 1}
end
def handle_call(:current, _from, current_number) do
{:reply, current_number, current_number}
end
def handle_cast(:down, current_number) do
{:noreply, current_number - 1}
end
def kill do
Logger.info "ok2"
pid = Process.whereis(__MODULE__)
Process.exit(pid, :kill)
end
end
defmodule Counter.Supervisor do
use Supervisor
def start_link(arg) do
Supervisor.start_link(__MODULE__, arg, name: __MODULE__)
end
def init(_) do
children = [{Counter.Server, 0}]
Supervisor.init(children, strategy: :one_for_one)
end
end
Counter.Supervisor.start_link([])
|> IO.inspect
Counter.Server.current_number
|> IO.inspect
Counter.Server.count_up
|> IO.inspect
Counter.Server.count_up
|> IO.inspect
Counter.Server.kill
|> IO.inspect
:timer.sleep(100)
Counter.Server.current_number
|> IO.inspect
Counter.Server.count_up
|> IO.inspect
実行結果
10:12:16.472 [info] ok
{:ok, #PID<0.99.0>}
0
1
2
true
10:12:16.477 [info] ok2
10:12:16.477 [info] ok
0
1
成果物
以上。