| 1 |
|
defmodule Elita.Enlist do |
| 2 |
|
import Utils.Normalize, only: [name: 1] |
| 3 |
|
|
| 4 |
|
def handle(key, opts, name, configs) do |
| 5 |
|
:global.register_name(key, self()) |
| 6 |
58 |
|> proceed(opts, name, configs) |
| 7 |
|
end |
| 8 |
|
|
| 9 |
|
defp proceed(:yes, opts, name, configs) do |
| 10 |
58 |
{:ok, opts, name, configs} |
| 11 |
|
end |
| 12 |
|
|
| 13 |
:-( |
defp proceed(:no, _opts, _name, _configs) do |
| 14 |
|
{:stop, :duplicate} |
| 15 |
|
end |
| 16 |
|
|
| 17 |
|
def cleanup(state) do |
| 18 |
37 |
key = {name(state.name), :puppet} |
| 19 |
37 |
:global.whereis_name(key) |> sweep(key) |
| 20 |
37 |
forget(state.name) |
| 21 |
|
end |
| 22 |
|
|
| 23 |
|
def release(state) do |
| 24 |
:-( |
key = {name(state.name), :puppet} |
| 25 |
:-( |
:global.whereis_name(key) |> sweep(key) |
| 26 |
|
end |
| 27 |
|
|
| 28 |
37 |
defp sweep(pid, key) when pid == self(), do: :global.unregister_name(key) |
| 29 |
:-( |
defp sweep(_pid, _key), do: :ok |
| 30 |
|
|
| 31 |
|
defp forget(name) do |
| 32 |
37 |
:ets.delete(:elita_vault, name) |
| 33 |
|
end |
| 34 |
|
end |