defmodule BackendWeb.UserSocket do use Phoenix.Socket require Logger ## Channels channel("user:*", BackendWeb.ConnectedUserChannel) @impl true def connect(%{"user_name" => user_name}, socket, _connect_info) do {:ok, assign(socket, :user_name, user_name)} end def connect(_params, _socket, _connect_info) do Logger.warning("WebSocket connection rejected: user_name required") {:error, %{reason: "user_name required"}} end @impl true def id(%{assigns: %{user_name: user_name}}) do # assign websocket to user name # allows other parts of app to manipulate all sockets for a given user "user_socket:#{user_name}" end def id(_socket), do: nil end