Changeset View
Changeset View
Standalone View
Standalone View
web/channels/user_socket.ex
defmodule KolabChat.UserSocket do | defmodule KolabChat.UserSocket do | ||||
use Phoenix.Socket | use Phoenix.Socket | ||||
alias KolabChat.Repo | |||||
alias KolabChat.User | |||||
## Channels | ## Channels | ||||
# channel "room:*", KolabChat.RoomChannel | # channel "room:*", KolabChat.RoomChannel | ||||
## Transports | ## Transports | ||||
transport :websocket, Phoenix.Transports.WebSocket | transport :websocket, Phoenix.Transports.WebSocket | ||||
# transport :longpoll, Phoenix.Transports.LongPoll | # transport :longpoll, Phoenix.Transports.LongPoll | ||||
# Socket params are passed from the client and can | # Socket params are passed from the client and can | ||||
# be used to verify and authenticate a user. After | # be used to verify and authenticate a user. After | ||||
# verification, you can put default assigns into | # verification, you can put default assigns into | ||||
# the socket that will be set for all channels, ie | # the socket that will be set for all channels, ie | ||||
# | |||||
# {:ok, assign(socket, :user_id, verified_user_id)} | # {:ok, assign(socket, :user_id, verified_user_id)} | ||||
# | |||||
# To deny connection, return `:error`. | # To deny connection, return `:error`. | ||||
# | def connect(%{"token" => token}, socket) do | ||||
# See `Phoenix.Token` documentation for examples in | case Phoenix.Token.verify(socket, "user", token, max_age: 86400) do | ||||
# performing token verification on connect. | {:ok, user_id} -> | ||||
def connect(_params, socket) do | socket = assign(socket, :user, Repo.get!(User, user_id)) | ||||
{:ok, socket} | {:ok, socket} | ||||
{:error, _} -> | |||||
:error | |||||
end | |||||
end | end | ||||
# Socket id's are topics that allow you to identify all sockets for a given user: | # Socket id's are topics that allow you to identify all sockets for a given user: | ||||
# | # | ||||
# def id(socket), do: "users_socket:#{socket.assigns.user_id}" | # def id(socket), do: "users_socket:#{socket.assigns.user_id}" | ||||
# | # | ||||
# Would allow you to broadcast a "disconnect" event and terminate | # Would allow you to broadcast a "disconnect" event and terminate | ||||
# all active sockets and channels for a given user: | # all active sockets and channels for a given user: | ||||
# | # | ||||
# KolabChat.Endpoint.broadcast("users_socket:#{user.id}", "disconnect", %{}) | # KolabChat.Endpoint.broadcast("users_socket:#{user.id}", "disconnect", %{}) | ||||
# | # | ||||
# Returning `nil` makes this socket anonymous. | # Returning `nil` makes this socket anonymous. | ||||
def id(_socket), do: nil | def id(_socket), do: nil | ||||
end | end |