ex-scopes/lib/core/actor.ex

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