How to Create a Basic PubSub Application: Difference between revisions

From ElixirBlocks
Jump to: navigation, search
No edit summary
No edit summary
Line 2: Line 2:




'''lib/app_name/application.ex'''


==In LiveView ==


<source>
<source>


def start(_type, _args) do
  def mount(_params, _session, socket) do
    children = [
    Testbeds.subscribe()
      # Start the Telemetry supervisor
    {:ok, assign(socket, testbeds: Testbeds.list_testbeds())}
      AppWeb.Telemetry,
  end
      # Start the Ecto repository
 
      App.Repo,
 
      # Start the PubSub system
  def handle_info({TestBeds, [:testbed | _], _}, socket) do
      {Phoenix.PubSub, name: App.PubSub},
    {:noreply, assign(socket, testbeds: TestBeds.list_testbeds())}
  end
</source>
 
== App/test_beds.ex ==
<source>
 
@topic inspect(__MODULE__)
 
def subscribe do
  Phoenix.PubSub.subscribe(App.PubSub, @topic)
end
 
 


    ]
defp broadcast_change({:ok, result}, event) do
  Phoenix.PubSub.broadcast(App.PubSub, @topic, {__MODULE__, event, result})


...
  {:ok, result}
end
end
# ....
  def create_testbed(attrs \\ %{}) do
    %Testbed{}
    |> Testbed.changeset(attrs)
    |> Repo.insert()
    |> broadcast_change([:testbed, :created])
  end
</source>
</source>

Revision as of 01:46, 15 June 2023

This page is in progress



In LiveView


   def mount(_params, _session, socket) do
     Testbeds.subscribe()
     {:ok, assign(socket, testbeds: Testbeds.list_testbeds())}
   end

   
  def handle_info({TestBeds, [:testbed | _], _}, socket) do
     {:noreply, assign(socket, testbeds: TestBeds.list_testbeds())}
  end

App/test_beds.ex


@topic inspect(__MODULE__)

def subscribe do
  Phoenix.PubSub.subscribe(App.PubSub, @topic)
end



defp broadcast_change({:ok, result}, event) do
  Phoenix.PubSub.broadcast(App.PubSub, @topic, {__MODULE__, event, result})

  {:ok, result}
end



# ....

  def create_testbed(attrs \\ %{}) do
    %Testbed{}
    |> Testbed.changeset(attrs)
    |> Repo.insert()
    |> broadcast_change([:testbed, :created])
  end