Packages
grizzly
8.2.2
9.1.4
9.1.2
9.1.1
9.1.0
9.0.0
8.15.3
8.15.2
8.15.1
8.15.0
8.14.0
8.13.0
8.12.0
8.11.3
8.11.2
8.11.1
8.11.0
8.10.0
8.9.0
8.8.1
8.8.0
8.7.1
8.7.0
8.6.12
8.6.11
8.6.10
8.6.9
8.6.8
8.6.7
retired
8.6.6
8.6.5
8.6.4
8.6.3
8.6.2
8.6.1
8.6.0
8.5.3
8.5.2
8.5.1
8.5.0
8.4.0
8.3.0
8.2.3
8.2.2
8.2.1
8.2.0
8.1.0
8.0.1
8.0.0
7.4.3
7.4.2
7.4.1
7.4.0
7.3.0
7.2.0
7.1.4
7.1.3
7.1.2
7.1.1
7.1.0
7.0.4
7.0.3
7.0.2
7.0.1
7.0.0
6.8.8
6.8.7
6.8.6
6.8.5
6.8.4
6.8.3
6.8.2
6.8.1
6.8.0
6.7.1
6.7.0
6.6.1
6.6.0
6.5.1
6.5.0
6.4.0
6.3.0
6.2.0
6.1.1
6.1.0
6.0.1
6.0.0
5.4.1
5.4.0
5.3.0
5.2.8
5.2.7
5.2.6
5.2.5
5.2.4
5.2.3
5.2.2
5.2.1
5.2.0
5.1.2
5.1.1
5.1.0
5.0.2
5.0.1
5.0.0
4.0.1
4.0.0
3.0.0
2.1.0
2.0.0
1.0.1
1.0.0
0.22.7
0.22.6
0.22.5
0.22.4
0.22.3
0.22.2
0.22.1
0.22.0
0.21.1
0.21.0
0.20.2
0.20.1
0.20.0
0.19.1
0.19.0
0.18.3
0.18.2
0.18.1
0.18.0
0.17.7
0.17.6
0.17.5
0.17.4
0.17.3
0.17.2
0.17.1
0.17.0
0.16.2
0.16.1
0.16.0
0.15.11
0.15.10
0.15.9
0.15.8
0.15.7
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.8
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.0
0.12.3
0.12.2
0.12.1
0.12.0
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
0.9.0
0.9.0-rc.4
0.9.0-rc.3
0.9.0-rc.2
0.9.0-rc.1
0.9.0-rc.0
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.0
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.0
0.4.3
0.4.2
Elixir Z-Wave library
Current section
Files
Jump to
Current section
Files
lib/grizzly/connections/supervisor.ex
defmodule Grizzly.Connections.Supervisor do
@moduledoc false
use DynamicSupervisor
alias Grizzly.{Connection, Options, ZWave}
alias Grizzly.Connections.{AsyncConnection, BinaryConnection, SyncConnection}
@spec start_link(Options.t()) :: Supervisor.on_start()
def start_link(options) do
DynamicSupervisor.start_link(__MODULE__, options, name: __MODULE__)
end
@doc """
Start a connection to a Z-Wave Node or the Z/IP Gateway
"""
@spec start_connection(ZWave.node_id() | :gateway, [Connection.opt()]) ::
DynamicSupervisor.on_start_child()
def start_connection(node_id, opts \\ []) do
case Keyword.get(opts, :mode, :sync) do
:async ->
opts = Keyword.put_new(opts, :owner, self())
do_start_connection(AsyncConnection, node_id, opts)
:sync ->
do_start_connection(SyncConnection, node_id)
:binary ->
do_start_connection(BinaryConnection, node_id, owner: self())
end
end
@doc """
Close all the connections
"""
@spec close_all_connections() :: :ok
def close_all_connections() do
if GenServer.whereis(__MODULE__) != nil do
connections_pids = DynamicSupervisor.which_children(__MODULE__)
Enum.each(connections_pids, fn {_, connection_pid, _, _} ->
:ok = Connection.close(connection_pid)
end)
end
:ok
catch
:exit, {:noproc, _} -> :ok
end
@impl DynamicSupervisor
def init(grizzly_options) do
DynamicSupervisor.init(strategy: :one_for_one, extra_arguments: [grizzly_options])
end
defp do_start_connection(connection_module, node_id, command_opts \\ []) do
case DynamicSupervisor.start_child(
__MODULE__,
connection_module.child_spec(node_id, command_opts)
) do
{:ok, _} = ok -> ok
{:ok, pid, _} -> {:ok, pid}
{:error, {:already_started, pid}} -> {:ok, pid}
{:error, _reason} = other_error -> other_error
end
end
end