From: Christopher Date: Sat, 21 Mar 2020 15:44:38 +0000 (-0500) Subject: move sessions to their own supervisor under realms X-Git-Url: http://git.entropealabs.com/?a=commitdiff_plain;h=fd43a1a322c8f5682e01caba16cda2dfb68780fb;p=wampex_router.git move sessions to their own supervisor under realms --- diff --git a/lib/router/realms.ex b/lib/router/realms.ex index 1348d76..ad99c78 100644 --- a/lib/router/realms.ex +++ b/lib/router/realms.ex @@ -2,6 +2,7 @@ defmodule Wampex.Router.Realms do @moduledoc false use Supervisor alias Wampex.Router.Realms.Proxy + alias Wampex.Router.Session require Logger def start_link(name: name) do @@ -11,7 +12,8 @@ defmodule Wampex.Router.Realms 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) @@ -24,6 +26,16 @@ defmodule Wampex.Router.Realms do 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 diff --git a/lib/router/transports/web_socket.ex b/lib/router/transports/web_socket.ex index 75bfec5..4cedd83 100644 --- a/lib/router/transports/web_socket.ex +++ b/lib/router/transports/web_socket.ex @@ -5,7 +5,8 @@ defmodule Wampex.Router.Transports.WebSocket do 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" @@ -27,7 +28,8 @@ defmodule Wampex.Router.Transports.WebSocket do @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 @@ -87,10 +89,6 @@ defmodule Wampex.Router.Transports.WebSocket do {: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)