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
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 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}}
Specs
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.")