28 lines
698 B
Elixir
28 lines
698 B
Elixir
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
|