31 lines
547 B
Elixir
31 lines
547 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
|