{:module, Leader, bytecode, _} =
defmodule Leader do
use GenServer
def start(name), do: GenServer.start(__MODULE__, 0, name: {:global, name})
@impl true
def init(jobs), do: {:ok, jobs}
@impl true
def handle_call(:run_job, _from, jobs), do: {:reply, {node(), jobs + 1}, jobs + 1}
end
for p <- [peer_a, peer_b],
do: {:module, Leader} = :peer.call(p, :code, :load_binary, [Leader, ~c"nofile", bytecode])
{:ok, leader_a} = :peer.call(peer_a, Leader, :start, [:leader])
job = fn peer -> :peer.call(peer, GenServer, :call, [{:global, :leader}, :run_job]) end
IO.inspect(job.(peer_a), label: "a runs a job on")
IO.inspect(job.(peer_b), label: "b runs a job on")