Почему handle_info никогда не вызывается?

Я пытаюсь использовать handle_info для отслеживания Presence присоединившихся пользователей, но я заметил, что handle_info никогда не вызывается, хотя пользователи успешно присоединяются и отправляют / получают сообщения ..

defmodule App.UserChannel do
  use App.Web, :channel
  alias App.Presence

...
...

def handle_info(info, socket) do
  IO.puts info  
  IO.puts "* * * "
  {:ok, _} = Presence.track(socket, socket.assigns.user_id, %{
    online_at: inspect(System.system_time(:seconds))
  })
  push socket, "presence_state", Presence.list(socket)
  {:noreply, socket}
end

...
...

Любая идея?

На стороне сервера в App.UserChannel, как я могу узнать, находится ли определенный пользователь в сети или в автономном режиме?

ИЗМЕНИТЬ

Нужен ли мне Elixir 1.3 для работы Presence? Я использую Elixir 1.2.6, Phoenix (1.2.0-rc.1)


person simo    schedule 08.06.2016    source источник


Ответы (1)


Вам не нужен Elixir 1.3, но в примере, который я использовал в эпизоде ​​DailyDrip, вы упоминали об этой проблеме в другом месте (https://www.dailydrip.com/topics/elixir/drips/phoenix-presence-chat) у моей функции соединения есть следующее:

def join("room:lobby", msg, socket) do
  send self, {:after_join, msg} # <---
  {:ok, socket}
end

Если у вас его нет, это объясняет упомянутое поведение.

person Josh Adams    schedule 09.06.2016
comment
ах! да, send self, {:after_join, msg} пропал, спасибо - person simo; 09.06.2016
comment
Вы пытались проверить, находится ли конкретный пользователь в сети или нет на стороне сервера? - person simo; 09.06.2016
comment
Я еще не дошел до этого, нет. Извините! - person Josh Adams; 09.06.2016