Show a dynamically updated list of NTS servers #1
|
@ -44,7 +44,9 @@ defmodule Chronoscope.NTS.Client do
|
|||
|
||||
@impl true
|
||||
def handle_call(:auto_refresh, _from, state) do
|
||||
:timer.send_after(1_000, :key_establishment)
|
||||
{:ok, timer} = :timer.send_interval(@refresh_interval_in_milliseconds, :key_establishment)
|
||||
|
||||
{:reply, :ok, Map.put(state, :timer, timer)}
|
||||
end
|
||||
|
||||
|
|
|
@ -6,6 +6,8 @@ defmodule ChronoscopeWeb.ClientActivator do
|
|||
alias Chronoscope.NTS
|
||||
alias Chronoscope.NTS.Parse
|
||||
|
||||
@activate_interval_in_milliseconds 300_000
|
||||
|
||||
@nts_file Application.compile_env(:chronoscope, :nts_file)
|
||||
|
||||
def start_link(_) do
|
||||
|
@ -14,13 +16,29 @@ defmodule ChronoscopeWeb.ClientActivator do
|
|||
|
||||
@impl true
|
||||
def init(_) do
|
||||
File.touch(Application.app_dir(:chronoscope, @nts_file))
|
||||
{:ok, %{nts_servers: activate_nts_clients()}}
|
||||
nts_servers =
|
||||
nts_servers()
|
||||
|> tap(fn servers -> Enum.each(servers, &NTS.auto_refresh/1) end)
|
||||
|
||||
:timer.send_interval(@activate_interval_in_milliseconds, :ensure_activated)
|
||||
|
||||
{:ok, %{nts_servers: nts_servers}}
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_info(:ensure_activated, state) do
|
||||
Enum.each(state.nts_servers, &NTS.auto_refresh/1)
|
||||
|
||||
{:noreply, state}
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_info(:activate_clients, _state) do
|
||||
{:noreply, %{nts_servers: activate_nts_clients()}}
|
||||
nts_servers =
|
||||
nts_servers()
|
||||
|> tap(fn servers -> Enum.each(servers, &NTS.auto_refresh/1) end)
|
||||
|
||||
{:noreply, %{nts_servers: nts_servers}}
|
||||
end
|
||||
|
||||
@impl true
|
||||
|
@ -28,13 +46,14 @@ defmodule ChronoscopeWeb.ClientActivator do
|
|||
{:reply, state.nts_servers, state}
|
||||
end
|
||||
|
||||
defp activate_nts_clients() do
|
||||
defp nts_servers() do
|
||||
File.touch(Application.app_dir(:chronoscope, @nts_file))
|
||||
|
||||
Application.app_dir(:chronoscope, @nts_file)
|
||||
|> File.stream!()
|
||||
|> Stream.map(&String.trim/1)
|
||||
|> Stream.filter(&(&1 != ""))
|
||||
|> Stream.map(&Parse.parse_nts_server/1)
|
||||
|> Enum.to_list()
|
||||
|> tap(fn server -> Enum.each(server, &NTS.auto_refresh/1) end)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue