34 lines
885 B
Elixir
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
|