poex/lib/poex_web/channels/pad_channel.ex

34 lines
885 B
Elixir

defmodule PoexWeb.PadChannel do
use Phoenix.Channel
alias Poex.Pads.DocumentDynamicSupervisor
alias Poex.Repo
alias Poex.Pads.Document
alias Poex.Pads.DocumentServer
@moduledoc """
Channel for users of pad documents
"""
def join("pad:lobby", _message, socket) do
{:ok, socket}
end
def join("pad:" <> document_id, _params, socket) do
document = Repo.get!(Document, document_id)
DocumentDynamicSupervisor.start_document_server(document)
contents = DocumentServer.get_contents(document_id)
{:ok, %{uuid: socket.assigns.uuid, contents: contents},
assign(socket, :document_id, document_id)}
end
def handle_in("update", %{"change" => change, "client_id" => client_id}, socket) do
DocumentServer.update(socket.assigns.document_id, %{
"change" => change,
"client_id" => client_id
})
{:noreply, socket}
end
end