Packages
gen_server_proxy
0.1.15
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 get_env(:timeout)
@times get_env(:times)
@spec sleep(GenServer.name(), term) :: :ok
def sleep(server, reason), do: sleep(server, reason, @times)
## Private functions
# On restarts, wait if server not yet registered...
@spec sleep(GenServer.name(), term, non_neg_integer) :: :ok
defp sleep(server, reason, 0) do
remains_unregistered_vars = {server, @timeout, @times, reason, __ENV__}
:ok = Log.warn(:remains_unregistered, remains_unregistered_vars)
end
defp sleep(server, reason, times_left) do
still_unregistered_vars = {server, @timeout, times_left, reason, __ENV__}
:ok = Log.info(:still_unregistered, still_unregistered_vars)
Process.sleep(@timeout)
case GenServer.whereis(server) do
pid when is_pid(pid) ->
times = @times - times_left + 1
now_registered_vars = {server, @timeout, times, reason, pid, __ENV__}
:ok = Log.info(:now_registered, now_registered_vars)
nil ->
sleep(server, reason, times_left - 1)
end
end
end