]> Entropealabs - wampex_router.git/commitdiff
move sessions to their own supervisor under realms
authorChristopher <chris@entropealabs.com>
Sat, 21 Mar 2020 15:44:38 +0000 (10:44 -0500)
committerChristopher <chris@entropealabs.com>
Sat, 21 Mar 2020 15:44:38 +0000 (10:44 -0500)
lib/router/realms.ex
lib/router/transports/web_socket.ex

index 1348d76a847714004b528d96dbd3b90f7e04c6c0..ad99c78a7df0ef1eb8da228c626c8aa64c89ba7c 100644 (file)
@@ -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
index 75bfec51049fce4aa3c57ddad4e959f3fe9e4044..4cedd83fe66b8db86321466711d109a2274f6a6e 100644 (file)
@@ -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)