私はwhatsappクローンを構築していますが、プレゼンスでいくつかのものを理解するのに苦労しています.
私は2つのチャンネルを持っています:
channel "chats:*", Typi.ChatChannel
channel "users:*", Typi.UserChannel
ユーザーがアプリ内にいる場合、ユーザーは常にusers:...
チャネルに接続されており、参加すると、彼の存在の追跡を開始します。
def join("users:" <> user_id, _payload, socket) do
send self(), :after_join
{:ok, socket}
end
def handle_info(:after_join, socket) do
Presence.track(socket, socket.assigns.current_user.id, %{})
{:noreply, socket}
end
ユーザーがチャットに参加するchat_id
と、メタに追加します。
def join("chats:" <> chat_id, _payload, socket) do
send self(), :after_join
{:ok, assign(socket, :current_chat, chat)}
end
def handle_info(:after_join, socket) do
Presence.track(socket, socket.assigns.current_user.id, %{
chat_id: socket.assigns.current_chat.id
})
{:noreply, socket}
end
ユーザーがチャットを離れたら、メタ情報を削除してプレゼンスを維持したい。どうやってやるの?
ありがとう