]> Entropealabs - wampex_client.git/commitdiff
add function to register dependent process
authorChristopher <chris@entropealabs.com>
Sun, 5 Apr 2020 15:20:49 +0000 (10:20 -0500)
committerChristopher <chris@entropealabs.com>
Sun, 5 Apr 2020 15:20:49 +0000 (10:20 -0500)
lib/client.ex
lib/client/session.ex

index ac5cc752ec343397d17027a14571ffb4714297b3..90b980f311472d7fb5e31ba50c872c9fbae9c8f3 100644 (file)
@@ -32,12 +32,15 @@ defmodule Wampex.Client do
       ) do
     subscriber_registry = subscriber_registry_name(name)
     callee_registry = callee_registry_name(name)
+    dependent_registry = dependent_registry_name(name)
     session_data = %Sess{session_data | name: name, roles: [Peer | session_data.roles]}
 
     children = [
       {Registry,
        [keys: :duplicate, name: subscriber_registry, partitions: System.schedulers_online()]},
       {Registry, [keys: :unique, name: callee_registry, partitions: System.schedulers_online()]},
+      {Registry,
+       [keys: :unique, name: dependent_registry, partitions: System.schedulers_online()]},
       {t,
        name: name,
        url: url,
@@ -56,6 +59,8 @@ defmodule Wampex.Client do
   def subscriber_registry_name(name), do: Module.concat([name, SubscriberRegistry])
   @spec callee_registry_name(module()) :: module()
   def callee_registry_name(name), do: Module.concat([name, CalleeRegistry])
+  @spec dependent_registry_name(module()) :: module()
+  def dependent_registry_name(name), do: Module.concat([name, DependentRegistry])
 
   @spec subscribe(name :: module(), subscription :: Subscribe.t(), timeout :: integer()) ::
           {:ok, integer()}
@@ -83,6 +88,16 @@ defmodule Wampex.Client do
     end
   end
 
+  @spec add(name :: module(), pid :: module() | pid()) :: {:ok, pid()} | {:error, term()}
+  def add(name, pid) do
+    Registry.register(dependent_registry_name(name), pid, pid)
+  end
+
+  @spec remove(name :: module(), pid :: module() | pid()) :: :ok
+  def remove(name, pid) do
+    Registry.unregister(dependent_registry_name(name), pid)
+  end
+
   @spec yield(name :: module(), yield :: Yield.t()) :: :ok
   def yield(name, yield) do
     cast(name, Callee.yield(yield))
@@ -98,7 +113,7 @@ defmodule Wampex.Client do
     sync(name, Callee.invocation_error(error))
   end
 
-  @spec publish(name :: module, event :: Publish.t()) :: :ok
+  @spec publish(name :: module(), event :: Publish.t()) :: :ok
   def publish(name, event) do
     cast(name, Publisher.publish(event))
   end
index 8e1b6d5f102351184c88fad91701930d63eb5552..d8e1981234752e4ab475f733526de29b68af35f2 100644 (file)
@@ -229,13 +229,10 @@ defmodule Wampex.Client.Session do
         @welcome,
         %SL{data: %Sess{name: name}} = sl
       ) do
-    sub = Client.subscriber_registry_name(name)
-    reg = Client.callee_registry_name(name)
-    subscribers = Registry.select(sub, [{{:_, :"$1", :_}, [], [:"$1"]}])
-    callees = Registry.select(reg, [{{:_, :"$1", :_}, [], [:"$1"]}])
-    pids = Enum.uniq(subscribers ++ callees)
+    deps = Registry.select(Client.dependent_registry_name(name), [{{:"$1", :_, :_}, [], [:"$1"]}])
 
-    Enum.each(pids, fn pid ->
+    Enum.each(deps, fn pid ->
+      Logger.info("Send connected to: #{inspect(pid)}")
       send(pid, {:connected, name})
     end)