42 lines
1.3 KiB
Erlang
42 lines
1.3 KiB
Erlang
%%%-------------------------------------------------------------------
|
|
%%% @author aresei
|
|
%%% @copyright (C) 2023, <COMPANY>
|
|
%%% @doc
|
|
%%% @end
|
|
%%%-------------------------------------------------------------------
|
|
-module(iot_device_sup).
|
|
-include("iot.hrl").
|
|
|
|
-behaviour(supervisor).
|
|
|
|
-export([start_link/0, init/1, delete_device/1, start_device/1]).
|
|
|
|
start_link() ->
|
|
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
|
|
|
|
init([]) ->
|
|
{ok, {#{strategy => one_for_one, intensity => 1000, period => 3600}, []}}.
|
|
|
|
-spec start_device(UUID :: binary()) -> {ok, Pid :: pid()} | {error, Reason :: any()}.
|
|
start_device(DeviceUUID) when is_binary(DeviceUUID) ->
|
|
case supervisor:start_child(?MODULE, child_spec(DeviceUUID)) of
|
|
{ok, Pid} when is_pid(Pid) ->
|
|
{ok, Pid};
|
|
{error, {'already_started', Pid}} when is_pid(Pid) ->
|
|
{ok, Pid};
|
|
{error, Error} ->
|
|
{error, Error}
|
|
end.
|
|
|
|
delete_device(UUID) when is_binary(UUID) ->
|
|
Id = iot_device:get_name(UUID),
|
|
supervisor:terminate_child(?MODULE, Id).
|
|
|
|
child_spec(DeviceUUID) when is_binary(DeviceUUID) ->
|
|
Name = iot_device:get_name(DeviceUUID),
|
|
#{id => Name,
|
|
start => {iot_device, start_link, [Name, DeviceUUID]},
|
|
restart => permanent,
|
|
shutdown => 2000,
|
|
type => worker,
|
|
modules => ['iot_device']}. |