28 lines
479 B
Elixir
28 lines
479 B
Elixir
defmodule Xplore.Actor do
|
|
|
|
def loop(bhv) do
|
|
receive do
|
|
{:message, msg} ->
|
|
bhv.(msg)
|
|
loop(bhv)
|
|
{:system, :become, bhv_n} -> loop(bhv_n)
|
|
{:system, :quit} -> :quit
|
|
end
|
|
end
|
|
|
|
def create(bhv) do
|
|
spawn_link(fn -> loop(bhv) end)
|
|
end
|
|
|
|
def send_message(ac, msg) do
|
|
send(ac, {:message, msg})
|
|
end
|
|
|
|
def become(ac, bhv) do
|
|
send(ac, {:system, :become, bhv})
|
|
end
|
|
|
|
def stop(ac) do
|
|
send(ac, {:system, :quit})
|
|
end
|
|
end
|