ex-scopes/lib/actor.ex
2026-04-19 08:25:51 +02:00

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