Current section
Files
Jump to
Current section
Files
lib/yggdrasil.ex
defmodule Yggdrasil do
use Application
@proxy_name Yggdrasil.Proxy
@broker_sup_name Yggdrasil.MessengerSupervisor
@feed_name Yggdrasil.Feed
@forwarder_name Yggdrasil.Util.Forwarder
@messengers_table Yggdrasil.Messengers
@subscribers_table Yggdrasil.Subscribers
def start(_type, _args) do
import Supervisor.Spec, warn: false
messengers = :ets.new @messengers_table,
[:set, :named_table, :public, read_concurrency: true]
subscribers = :ets.new @subscribers_table,
[:set, :named_table, :public,
read_concurrency: true]
children = [
worker(@proxy_name, [[name: @proxy_name]]),
supervisor(@broker_sup_name, [[name: @broker_sup_name]]),
worker(@feed_name,
[@broker_sup_name, @proxy_name, subscribers, messengers,
nil, [name: @feed_name]])
]
opts = [strategy: :rest_for_one, name: Yggdrasil.Supervisor]
case Mix.env do
:prod ->
Supervisor.start_link children, opts
_ ->
test_children = [worker(@forwarder_name, [[name: @forwarder_name]]) |
children]
Supervisor.start_link test_children, opts
end
end
end