Electric.Shapes.ConsumerRegistry (electric v1.2.4)

View Source

Summary

Types

shape_handle()

@type shape_handle() :: Electric.ShapeCacheBehaviour.shape_handle()

stack_id()

@type stack_id() :: Electric.stack_id()

stack_ref()

@type stack_ref() :: stack_id() | [{:stack_id, stack_id()}] | %{stack_id: stack_id()}

t()

@type t() :: %Electric.Shapes.ConsumerRegistry{
  stack_id: stack_id(),
  table: :ets.table()
}

Functions

active_consumer_count(stack_id)

@spec active_consumer_count(stack_id()) :: non_neg_integer()

broadcast(pids, message)

@spec broadcast([pid()], term()) :: :ok

Calls many GenServers asynchronously with the same message and waits for their responses before returning.

Returns :ok once all GenServers have responded or have died.

There is no timeout so if the GenServers do not respond or die, this function will block indefinitely.

new(stack_id, opts \\ [])

publish(shape_handles, event, registry_state)

@spec publish([shape_handle()], term(), t()) :: :ok

register_consumer(shape_handle, pid, stack_id)

@spec register_consumer(shape_handle(), pid(), stack_id()) :: {:ok, non_neg_integer()}
@spec register_consumer(shape_handle(), pid(), t()) :: {:ok, non_neg_integer()}
@spec register_consumer(shape_handle(), pid(), :ets.table()) ::
  {:ok, non_neg_integer()}

remove_consumer(shape_handle, consumer_registry)

@spec remove_consumer(shape_handle(), t()) :: :ok

whereis(stack_ref, shape_handle)

@spec whereis(stack_ref(), shape_handle()) :: pid() | nil