From: Christopher Date: Sun, 5 Apr 2020 15:20:49 +0000 (-0500) Subject: add function to register dependent process X-Git-Url: http://git.entropealabs.com/?a=commitdiff_plain;h=145cd4b8827484ad9118bd3e52740e6f6e3f34a4;p=wampex_client.git add function to register dependent process --- diff --git a/lib/client.ex b/lib/client.ex index ac5cc75..90b980f 100644 --- a/lib/client.ex +++ b/lib/client.ex @@ -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 diff --git a/lib/client/session.ex b/lib/client/session.ex index 8e1b6d5..d8e1981 100644 --- a/lib/client/session.ex +++ b/lib/client/session.ex @@ -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)