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