Packages
gen_server_proxy
0.1.1
0.1.72
0.1.71
0.1.70
0.1.68
0.1.67
0.1.66
0.1.65
0.1.64
0.1.63
0.1.62
0.1.61
0.1.60
0.1.59
0.1.58
0.1.57
0.1.56
0.1.55
0.1.54
0.1.53
0.1.52
0.1.51
0.1.50
0.1.49
0.1.48
0.1.47
0.1.46
0.1.45
0.1.44
0.1.43
0.1.42
0.1.40
0.1.39
0.1.38
0.1.37
0.1.36
0.1.35
0.1.34
0.1.33
0.1.32
0.1.31
0.1.30
0.1.29
0.1.28
0.1.27
0.1.26
0.1.25
0.1.24
0.1.23
0.1.22
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Invokes call, cast or stop with a GenServer registered via a server ID. Will wait a bit if the GenServer is not yet registered on restarts.
Current section
Files
Jump to
Current section
Files
lib/gen_server/proxy/timer.ex
defmodule GenServer.Proxy.Timer do
use PersistConfig
alias GenServer.Proxy.Log
@timeout Application.get_env(@app, :timeout)
@times Application.get_env(@app, :times)
@spec sleep(term, module, term) :: :ok
def sleep(server_id, module, reason) do
sleep(server_id, module, reason, @times)
end
## Private functions
# On restarts, wait if server not yet registered...
@spec sleep(term, module, term, non_neg_integer) :: :ok
defp sleep(server_id, _module, reason, 0) do
Log.warn(:remains_unregistered, {server_id, @timeout, @times, reason})
end
defp sleep(server_id, module, reason, times_left) do
Log.info(:still_unregistered, {server_id, @timeout, times_left, reason})
Process.sleep(@timeout)
case server_id |> module.server_name() |> GenServer.whereis() do
pid when is_pid(pid) ->
times = @times - times_left + 1
Log.info(:now_registered, {server_id, @timeout, times, reason, pid})
nil ->
sleep(server_id, module, reason, times_left - 1)
end
end
end