@spec add(name :: module(), pid :: module() | pid()) :: {:ok, pid()} | {:error, term()}
def add(name, pid) do
- Registry.register(dependent_registry_name(name), pid, pid)
+ case session_exists(name) do
+ false ->
+ %Error{error: "wamp.error.no_session"}
+
+ sess_name ->
+ Sess.add(sess_name, pid)
+ end
end
@spec remove(name :: module(), pid :: module() | pid()) :: :ok
:challenge,
:interrupt,
message_queue: [],
+ connected: false,
request_id: 0,
protocol: "wamp.2.msgpack",
transport: WebSocket,
challenge: Challenge.t() | nil,
interrupt: integer() | nil,
message_queue: [],
+ connected: boolean(),
request_id: integer(),
protocol: binary(),
transport: module(),
__MODULE__.call(name, {:send_request, request}, timeout)
end
+ def add(name, pid) do
+ __MODULE__.call(name, {:add, pid})
+ end
+
+ @impl true
+ def handle_call({:add, pid}, from, _, %SL{data: %Sess{name: name, connected: conn}} = sl) do
+ case conn do
+ true ->
+ send(pid, {:connected, name})
+
+ false ->
+ :noop
+ end
+
+ r = Registry.register(Client.dependent_registry_name(name), pid, pid)
+ {:ok, sl, [{:reply, from, r}]}
+ end
+
@impl true
def handle_call(
{:send_request, request},
@handle_welcome,
_,
@welcome,
- %SL{data: %Sess{name: name}} = sl
+ %SL{data: %Sess{name: name} = session} = sl
) do
deps = Registry.select(Client.dependent_registry_name(name), [{{:"$1", :_, :_}, [], [:"$1"]}])
send(pid, {:connected, name})
end)
- {:ok, sl, [{:next_event, :internal, :established}]}
+ {:ok, %SL{sl | data: %Sess{session | connected: true}},
+ [{:next_event, :internal, :established}]}
end
@impl true