Current section

Files

Jump to
acs_ex lib session_supervisor.ex
Raw

lib/session_supervisor.ex

defmodule ACS.Session.Supervisor do
use DynamicSupervisor
require Logger
def start_link(session_handler: session_module) do
Logger.debug("SessionSupervisor start")
# Have to register the supervisor process, so we can reference it
# in the start_session/1 function
# The session_module parameter is a module containing a session_start/3 method
DynamicSupervisor.start_link(__MODULE__, session_module, name: :session_supervisor)
end
def start_session(session_id, device_id, message, fun) do
Logger.debug("SessionSupervisor start_session(#{session_id},...) with function")
spec =
{ACS.Session, [session_id: session_id, device_id: device_id, message: message, fun: fun]}
DynamicSupervisor.start_child(:session_supervisor, spec)
end
def start_session(session_id, device_id, message) do
Logger.debug("SessionSupervisor start_session(#{session_id},...) without function")
spec = {ACS.Session, [session_id: session_id, device_id: device_id, message: message]}
DynamicSupervisor.start_child(:session_supervisor, spec)
end
def end_session(session_id) do
Logger.debug("SessionSupervisor end_session(#{session_id})")
DynamicSupervisor.terminate_child(
:session_supervisor,
:gproc.where({:n, :l, {:session_id, session_id}})
)
end
def init(session_module) do
DynamicSupervisor.init(
strategy: :one_for_one,
extra_arguments: [session_module]
)
end
end