ex-scopes/lib/core/actor.ex

35 lines
671 B
Elixir

defmodule Scopes.Core.Actor do
require Logger
defp loop(bhv) do
receive do
msg ->
Logger.debug([msg: 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, delay \\ 0) do
Process.sleep(delay)
#Process.send_after(ac, {:message, msg}, delay)
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