"""
@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 []
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}
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
},
unquote(state) = state
) do
- state = unquote(block)
- {:noreply, state}
+ unquote(block)
end
end
end