This is an old revision of the document!
<code elixir> defmodule Database do
use GenServer
def start_link(name_server, opts \\ []) do GenServer.start_link(__MODULE__, name_server, []) end
def start(name_server) do GenServer.start(__MODULE__, name_server, []) end
def call(mod) do GenServer.call(mod, "Message") end
def kill(mod) do Process.exit(mod, "killed") end
def init(ns) do # DB has no Depends IO.puts Atom.to_string(__MODULE__) <> " has started" NameServer.register(ns, :Database, self()) {:ok, []} end
def handle_call(_request, _From, state) do #check Depends {:reply, :ok, state} end
def handle_cast(_request, state) do #check Depends (none) {:noreply, state} end
def handle_info(_, state) do #checkDepends (none) {:noreply, state} end
end
defmodule CustomerService do
use GenServer
def start_link(name_server, opts \\ []) do GenServer.start_link(__MODULE__, name_server, []) end
def start(name_server) do GenServer.start(__MODULE__, name_server, []) end
def call(mod) do GenServer.call(mod, "Message") end
def kill(mod) do Process.exit(mod, "killed") end
def init(ns) do # DB has no Depends IO.puts Atom.to_string(__MODULE__) <> " has started" NameServer.register(ns, :CustomerService, self()) {:ok, []} end
def handle_call(_request, _From, state) do #check Depends {:reply, :ok, state} end
def handle_cast(_request, state) do #check Depends (none) {:noreply, state} end
def handle_info(_, state) do #checkDepends (none) {:noreply, state} end
end
defmodule Info do
use GenServer
def start_link(name_server, opts \\ []) do GenServer.start_link(__MODULE__, name_server, []) end
def start(name_server) do GenServer.start(__MODULE__, name_server, []) end
def call(mod) do GenServer.call(mod, "Message") end
def kill(mod) do Process.exit(mod, "killed") end
def init(ns) do # DB has no Depends IO.puts Atom.to_string(__MODULE__) <> " has started" NameServer.register(ns, :Info, self()) send self(), {:start, ns} {:ok, []} end
def handle_call(_request, _From, state) do if ! check_alive(state) do {:stop, "dependency not found", "dependency not found", state} end {:reply, :ok, state} end
def check_alive(processes) do x = Enumerable.map(processes, &Process.alive/0) reducer = fn l, r -> l and r end Enumberable.reduce(x, true, reducer) end
def handle_cast(_request, state) do #check Depends (none) {:noreply, state} end
def handle_info({:start, ns}, _state) do :timer.sleep(500) case NameServer.resolve(ns, :Database) do :error -> {:stop, "No Database Found", []} x -> {:noreply, [x]} end end
def handle_info(_, state) do #checkDepends (none) {:noreply, state} end
end
defmodule Order do
use GenServer
def start_link(name_server, opts \\ []) do GenServer.start_link(__MODULE__, name_server, []) end
def start(name_server) do GenServer.start(__MODULE__, name_server, []) end
def call(mod) do GenServer.call(mod, "Message") end
def kill(mod) do Process.exit(mod, "killed") end
def init(ns) do # DB has no Depends IO.puts Atom.to_string(__MODULE__) <> " has started" NameServer.register(ns, :Order, self()) send self(), {:start, ns} {:ok, []} end
def handle_call(_request, _From, state) do if ! check_alive(state) do {:stop, "dependency not found", "dependency not found", state} end {:reply, :ok, state} end
def check_alive(processes) do x = Enumerable.map(processes, &Process.alive/0) reducer = fn l, r -> l and r end Enumberable.reduce(x, true, reducer) end
def handle_cast(_request, state) do #check Depends (none) {:noreply, state} end
def handle_info({:start, ns}, _state) do :timer.sleep(500) case NameServer.resolve(ns, :Database) do :error -> {:stop, "No Database Found", []} x -> case NameServer.resolve(ns, :User) do :error -> {:stop, "User Module not Found", []} y -> {:noreply, [x, y]} end end end
def handle_info(_, state) do #checkDepends (none) {:noreply, state} end
end
defmodule Shipper do
use GenServer
def start_link(name_server, opts \\ []) do GenServer.start_link(__MODULE__, name_server, []) end
def start(name_server) do GenServer.start(__MODULE__, name_server, []) end
def call(mod) do GenServer.call(mod, "Message") end
def kill(mod) do Process.exit(mod, "killed") end
def init(ns) do # DB has no Depends IO.puts Atom.to_string(__MODULE__) <> " has started" NameServer.register(ns, :Shipper, self()) send self(), {:start, ns} {:ok, []} end
def handle_call(_request, _From, state) do if ! check_alive(state) do {:stop, "dependency not found", "dependency not found", state} end {:reply, :ok, state} end
def check_alive(processes) do x = Enumerable.map(processes, &Process.alive/0) reducer = fn l, r -> l and r end Enumberable.reduce(x, true, reducer) end
def handle_cast(_request, state) do #check Depends (none) {:noreply, state} end
def handle_info({:start, ns}, _state) do :timer.sleep(500) case NameServer.resolve(ns, :Database) do :error -> {:stop, "No Database Found", []} x ->{:noreply, [x]}
end end
def handle_info(_, state) do #checkDepends (none) {:noreply, state} end
end
defmodule User do
use GenServer
def start_link(name_server, opts \\ []) do GenServer.start_link(__MODULE__, name_server, []) end
def start(name_server) do GenServer.start(__MODULE__, name_server, []) end
def call(mod) do GenServer.call(mod, "Message") end
def kill(mod) do Process.exit(mod, "killed") end
def init(ns) do # DB has no Depends IO.puts Atom.to_string(__MODULE__) <> " has started" NameServer.register(ns, :User, self()) send self(), {:start, ns} {:ok, []} end
def handle_call(_request, _From, state) do if ! check_alive(state) do {:stop, "dependency not found", "dependency not found", state} end {:reply, :ok, state} end
def check_alive(processes) do x = Enumerable.map(processes, &Process.alive/0) reducer = fn l, r -> l and r end Enumberable.reduce(x, true, reducer) end
def handle_cast(_request, state) do #check Depends (none) {:noreply, state} end
def handle_info({:start, ns}, _state) do :timer.sleep(500) case NameServer.resolve(ns, :Database) do :error -> {:stop, "No Database Found", []} x -> case NameServer.resolve(ns, :Order) do :error -> {:stop, "User Module not Found", []} y -> {:noreply, [x, y]} end end end
def handle_info(_, state) do #checkDepends (none) {:noreply, state} end
end
</code