Мой вариант использования заключается в подключении нескольких пользователей к лобби / комнате ожидания, но только два из них будут выбраны из лобби для начала разговора, после чего они должны быть удалены из лобби.Как я могу это реализовать?Обратите внимание, что в этой системе пользователи не зарегистрированы и не имеют имен пользователей.Они должны напрямую входить с веб-страницы.
По-видимому, функции track
и untrack
также имеют варианты, которые принимают pid
в качестве аргумента.Однако я не уверен, как я могу получить pids процессов в первую очередь, когда нужно начать диалог.
Является ли функция self()
правильной для использования в этом случае?то есть, возможно, я могу написать
def handle_info(:after_lobby_join, socket) do
Presence.track(socket, "lobby", %{
pid: self()
})
{:noreply, socket}
end
def handle_info(:start, socket) do
pid1 = hd(Presence.list(socket)["lobby"][:metas])[:pid]
# Start the conversation by sending messages individually to pid1 and pid2
...
untrack(pid1, "my_app:lobby", "lobby")
{:ok, socket}
end
Или я слишком усложняю проблему / неправильно понимаю Присутствие?
Есть также поле phx_ref
, но я не могу использоватьэто для этой цели.
Кроме того, по-видимому, я хотел бы только отправить "start_conversation"
сообщений двум выбранным пользователям, но не другим в лобби.Я вижу, что функция push
отправляет сообщения в назначенный сокет.Но если я отслеживаю pid, можно ли определить соответствующие гнезда из pid?