Elixir ATProtocol firehose & subscription listener
at main 1.0 kB view raw
1defmodule Drinkup do 2 use Supervisor 3 alias Drinkup.Options 4 5 @dialyzer nowarn_function: {:init, 1} 6 @impl true 7 def init({%Options{name: name} = drinkup_options, supervisor_options}) do 8 children = [ 9 {Task.Supervisor, name: {:via, Registry, {Drinkup.Registry, {name, Tasks}}}}, 10 {Drinkup.Socket, drinkup_options} 11 ] 12 13 Supervisor.start_link( 14 children, 15 supervisor_options ++ [name: {:via, Registry, {Drinkup.Registry, {name, Supervisor}}}] 16 ) 17 end 18 19 @spec child_spec(Options.options()) :: Supervisor.child_spec() 20 def child_spec(%{} = options), do: child_spec({options, [strategy: :one_for_one]}) 21 22 @spec child_spec({Options.options(), Keyword.t()}) :: Supervisor.child_spec() 23 def child_spec({drinkup_options, supervisor_options}) do 24 %{ 25 id: Map.get(drinkup_options, :name, __MODULE__), 26 start: {__MODULE__, :init, [{Options.from(drinkup_options), supervisor_options}]}, 27 type: :supervisor, 28 restart: :permanent, 29 shutdown: 500 30 } 31 end 32end