GenServer.Proxy behaviour (GenServer Proxy v0.1.18) View Source

Makes a GenServer call to a registered server. Will wait a bit if the server is not yet registered on restarts. Also supports GenServer cast and GenServer stop.

Link to this section Summary

Functions

Makes a GenServer call to a registered server given its server ID. Will wait a bit if the server is not yet registered on restarts.

Callbacks

Converts a server ID into a server name like a via tuple.

Called when the server remains unregistered despite waiting a bit.

Link to this section Functions

Link to this macro

call(request, server_id, module \\ nil)

View Source (macro)

Makes a GenServer call to a registered server given its server ID. Will wait a bit if the server is not yet registered on restarts.

The given module (or by default <caller's_module>.Proxy) must implement the 2 callbacks of GenServer.Proxy (this module).

Examples

# Assuming the following callback module:

defmodule Game.Engine.Proxy do
  @behaviour GenServer.Proxy

  @impl GenServer.Proxy
  def server_name(game_name),
    do: {:via, Registry, {:registry, game_name}}

  @impl GenServer.Proxy
  def server_unregistered(game_name),
    do: IO.puts("Game #{game_name} not started.")
end

# We could use the call macro like so:

defmodule Game.Engine do
  use GenServer.Proxy

  def summary(game_name), do: call(:summary, game_name)
  ...
end
Link to this macro

cast(request, server_id, module \\ nil)

View Source (macro)
Link to this macro

stop(reason, server_id, module \\ nil)

View Source (macro)

Link to this section Callbacks

Specs

server_name(server_id :: term()) :: GenServer.name()

Converts a server ID into a server name like a via tuple.

Examples

@impl GenServer.Proxy
def server_name(game_name),
  do: {:via, Registry, {:registry, game_name}}

@impl GenServer.Proxy
def server_name(game_name),
  do: {:global, {GameServer, game_name}}
Link to this callback

server_unregistered(server_id)

View Source

Specs

server_unregistered(server_id :: term()) :: term()

Called when the server remains unregistered despite waiting a bit.

Examples

@impl GenServer.Proxy
def server_unregistered(game_name),
  do: IO.puts("Game #{game_name} not started.")