@moduledoc false
use Supervisor
alias Wampex.Router.Realms.Proxy
+ alias Wampex.Router.Session
require Logger
def start_link(name: name) do
@impl true
def init(name) do
children = [
- {DynamicSupervisor, strategy: :one_for_one, name: realm_supervisor_name(name)}
+ {DynamicSupervisor, strategy: :one_for_one, name: realm_supervisor_name(name)},
+ {DynamicSupervisor, strategy: :one_for_one, name: session_supervisor_name(name)}
]
Supervisor.init(children, strategy: :one_for_one)
r_name
end
+ def start_session(r_name, db, name, transport, socket) do
+ s_name = session_supervisor_name(r_name)
+
+ DynamicSupervisor.start_child(
+ s_name,
+ {Session, [%Session{db: db, name: name, transport: transport, transport_pid: socket}]}
+ )
+ end
+
+ def session_supervisor_name(name), do: Module.concat([name, Sessions])
def realm_supervisor_name(name), do: Module.concat([name, Supervisor])
def realm_name(realm), do: Module.concat([__MODULE__, realm])
end
require Logger
alias __MODULE__
- alias Wampex.Router.Session
+ alias Wampex.Router
+ alias Wampex.Router.Realms
alias Wampex.Serializers.{JSON, MessagePack}
@protocol_header "sec-websocket-protocol"
@impl true
def websocket_init({state, db, name}) do
- {:ok, session} = start_session(db, name)
+ {:ok, session} = Realms.start_session(Router.realms_name(name), db, name, WebSocket, self())
+ Process.link(session)
Logger.info("Websocket Initialized: #{inspect(state)}")
{:ok, %WebSocket{state | session: session}}
end
{:ok, state}
end
- defp start_session(db, name) do
- Session.start_link(%Session{db: db, name: name, transport: WebSocket, transport_pid: self()})
- end
-
defp get_serializer(req) do
@protocol_header
|> :cowboy_req.parse_header(req)