defmodule PhoenixBase.UserSocket do
  @moduledoc """
  Contains the base websocket configuration for the app. This socket module
  is used for negotiating any Phoenix Channel connections in this app.

  For more information about Phoenix sockets, see these docs:

  http://www.phoenixframework.org/docs/channels
  http://hexdocs.pm/phoenix/Phoenix.Socket.html
  """

  use Phoenix.Socket

  ## Channels
  # channel "rooms:*", PhoenixBase.RoomChannel

  ## Transports
  transport :websocket, Phoenix.Transports.WebSocket
  # transport :longpoll, Phoenix.Transports.LongPoll

  # Socket params are passed from the client and can
  # be used to verify and authenticate a user. After
  # verification, you can put default assigns into
  # the socket that will be set for all channels, ie
  #
  #     {:ok, assign(socket, :user_id, verified_user_id)}
  #
  # To deny connection, return `:error`.
  #
  # See `Phoenix.Token` documentation for examples in
  # performing token verification on connect.
  def connect(_params, socket) do
    {:ok, socket}
  end

  # 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}"
  #
  # Would allow you to broadcast a "disconnect" event and terminate
  # all active sockets and channels for a given user:
  #
  #     PhoenixBase.Endpoint.broadcast("users_socket:#{user.id}", "disconnect", %{})
  #
  # Returning `nil` makes this socket anonymous.
  def id(_socket), do: nil
end
