47 lines
1.5 KiB
Elixir
47 lines
1.5 KiB
Elixir
defmodule Phoenix.PubSub.Adapter do
|
|
@moduledoc """
|
|
Specification to implement a custom PubSub adapter.
|
|
"""
|
|
|
|
@type adapter_name :: atom
|
|
|
|
@doc """
|
|
Returns the node name as an atom or a binary.
|
|
"""
|
|
@callback node_name(adapter_name) :: Phoenix.PubSub.node_name()
|
|
|
|
@doc """
|
|
Returns a child specification that mounts the processes
|
|
required for the adapter.
|
|
|
|
`child_spec` will receive all options given `Phoenix.PubSub`.
|
|
Note, however, that the `:name` under options is the name
|
|
of the complete PubSub system. The reserved key space to
|
|
be used by the adapter is under the `:adapter_name` key.
|
|
"""
|
|
@callback child_spec(keyword) :: Supervisor.child_spec()
|
|
|
|
@doc """
|
|
Broadcasts the given topic, message, and dispatcher to
|
|
all nodes in the cluster (except the current node itself).
|
|
"""
|
|
@callback broadcast(
|
|
adapter_name,
|
|
topic :: Phoenix.PubSub.topic(),
|
|
message :: Phoenix.PubSub.message(),
|
|
dispatcher :: Phoenix.PubSub.dispatcher()
|
|
) :: :ok | {:error, term}
|
|
|
|
@doc """
|
|
Broadcasts the given topic, message, and dispatcher to
|
|
given node in the cluster (it may point to itself).
|
|
"""
|
|
@callback direct_broadcast(
|
|
adapter_name,
|
|
node_name :: Phoenix.PubSub.node_name(),
|
|
topic :: Phoenix.PubSub.topic(),
|
|
message :: Phoenix.PubSub.message(),
|
|
dispatcher :: Phoenix.PubSub.dispatcher()
|
|
) :: :ok | {:error, term}
|
|
end
|