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
 |