35 lines
671 B
Elixir
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
|