35 lines
593 B
Elixir
35 lines
593 B
Elixir
defmodule Scopes.Core.Actor do
|
|
defp loop(bhv) do
|
|
receive do
|
|
msg ->
|
|
# IO.puts("receive: #{inspect msg}")
|
|
case msg do
|
|
{:message, msg} ->
|
|
bhv.(msg)
|
|
loop(bhv)
|
|
|
|
{:become, bhv_n} ->
|
|
loop(bhv_n)
|
|
|
|
{:quit} ->
|
|
nil
|
|
end
|
|
end
|
|
end
|
|
|
|
def create(bhv) do
|
|
spawn_link(fn -> loop(bhv) end)
|
|
end
|
|
|
|
def send(ac, msg) do
|
|
Kernel.send(ac, {:message, msg})
|
|
end
|
|
|
|
def become(ac, bhv) do
|
|
Kernel.send(ac, {:become, bhv})
|
|
end
|
|
|
|
def stop(ac) do
|
|
Kernel.send(ac, {:quit})
|
|
end
|
|
end
|