Skip to main content

lib/quickbeam/broadcast_channel.ex

defmodule QuickBEAM.BroadcastChannel do
  @moduledoc false

  @scope QuickBEAM.BroadcastChannel

  @spec join([String.t()], pid()) :: :ok
  def join([name], caller) do
    :pg.join(@scope, name, caller)
    :ok
  end

  @spec post(list(), pid()) :: :ok
  def post([name, message], caller) do
    for pid <- :pg.get_members(@scope, name), pid != caller do
      send(pid, {:broadcast_message, name, message})
    end

    :ok
  end

  @spec leave([String.t()], pid()) :: :ok
  def leave([name], caller) do
    :pg.leave(@scope, name, caller)
    :ok
  end
end