From: Christopher Coté Date: Thu, 11 Nov 2021 17:13:08 +0000 (-0500) Subject: further handler enhancements and version bump X-Git-Url: http://git.entropealabs.com/?a=commitdiff_plain;h=0597a38a83a687353ad894b31502339e1d3fb8a3;p=wampex_client.git further handler enhancements and version bump --- diff --git a/lib/client/handler.ex b/lib/client/handler.ex index fdff335..4f26224 100644 --- a/lib/client/handler.ex +++ b/lib/client/handler.ex @@ -4,12 +4,15 @@ defmodule Wampex.Client.Handler do """ @callback do_init(any()) :: %{client_name: atom()} + require Logger + defmacro __using__(_opts) do quote do use GenServer alias Wampex.Client alias Wampex.Roles.Callee.Yield alias Wampex.Roles.Peer.Error + require Logger import unquote(__MODULE__) @before_compile unquote(__MODULE__) @procedures [] @@ -32,7 +35,7 @@ defmodule Wampex.Client.Handler do struct(state, %{client_name: cn}) end - defp add_client(state, cn), do: %{state | client_name: cn} + defp add_client(state, cn), do: Map.put(state, :client_name, cn) @impl true def handle_continue({:registered, _}, state), do: {:noreply, state} @@ -63,26 +66,39 @@ defmodule Wampex.Client.Handler do procedures = Module.get_attribute(env.module, :procedures) |> Enum.uniq() topics = Module.get_attribute(env.module, :topics) |> Enum.uniq() + Logger.info( + "#{env.module} | Registering topics: #{inspect(topics)}, procedures: #{inspect(procedures)}" + ) + quote do + require Logger alias Wampex.Client alias Wampex.Roles.Callee.Register alias Wampex.Roles.Subscriber.Subscribe @impl true def handle_info({:connected, _}, %{client_name: cn} = state) do + Logger.info("Connected") + regs = Enum.map(unquote(procedures), fn p -> - Client.register(cn, %Register{procedure: p}) + {:ok, reg} = Client.register(cn, %Register{procedure: p}) + reg end) subs = Enum.map(unquote(topics), fn {t, match} -> - Client.subscribe(cn, %Subscribe{topic: t, options: %{"match" => match}}) + {:ok, proc} = + Client.subscribe(cn, %Subscribe{topic: t, options: %{"match" => match}}) + + proc t -> - Client.subscribe(cn, %Subscribe{topic: t}) + {:ok, reg} = Client.subscribe(cn, %Subscribe{topic: t}) + reg end) + Logger.info("Registered!") {:noreply, state, {:continue, {:registered, %{registrations: regs, subscriptions: subs}}}} end end @@ -128,8 +144,7 @@ defmodule Wampex.Client.Handler do }, unquote(state) = state ) do - state = unquote(block) - {:noreply, state} + unquote(block) end end end diff --git a/mix.exs b/mix.exs index f7aac89..ea38e49 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Wampex.Client.MixProject do def project do [ app: :wampex_client, - version: "0.1.2", + version: "0.1.3", elixir: "~> 1.9", start_permanent: Mix.env() == :prod, elixirc_paths: elixirc_paths(Mix.env()),