Phoenix的存在跨多个通道跟踪用户



,因此我想使用存在行为来跟踪每个用户的当前房间。问题在于,如果用户更改当前房间,我不能/不知道如何更新Room_ID。

def join("room:" <> room_id, auth_message, socket) do IO.puts "joining room:" <> room_id if authorized?(room_id, socket) do {:ok, assign(socket, :room_id, room_id)} else {:error, %{reason: "unauthorized"}} end end

用户加入房间时,我通过房间_id,然后我在房间之间进行更改时进行了处理:

 def handle_in("room:changed", %{"room_id" => room_id, "user_id" => user_id}, socket) do
    IO.puts "user moved to room #{inspect room_id} "
    Presence.track(socket, socket.assigns.user_id, %{room_id: socket.assigns.room_id})
    IO.inspect(Presence.list(socket))
    push socket, "presence_state", Presence.list(socket)
    {:noreply, socket}
  end

事实是,在他单击的每个房间里,列表中都有一个新的条目,因此基本上他同时在所有这些房间中。我想要的是仅在室内搬走时更新室内。

频道具有终止/2个回调,您可以用来更新在场。

def terminate(reason, _socket) do
  Logger.debug"> leave #{inspect reason}"
  :ok
end

相关内容

  • 没有找到相关文章

最新更新