defmodule Slurp.NewHeads.Timer do
use GenServer
alias Slurp.{Blockchains, NewHeads}
defmodule State do
@type blockchain :: Blockchains.Blockchain.t()
@type t :: %State{
blockchain: blockchain
}
defstruct ~w[blockchain]a
end
@type blockchain :: Blockchains.Blockchain.t()
@type blockchain_id :: Blockchains.Blockchain.id()
@spec start_link(blockchain: blockchain) :: GenServer.on_start()
def start_link(blockchain: blockchain) do
name = process_name(blockchain.id)
state = %State{blockchain: blockchain}
GenServer.start_link(__MODULE__, state, name: name)
end
@spec process_name(blockchain_id) :: atom
def process_name(id), do: :"#{__MODULE__}_#{id}"
def init(state) do
Process.send(self(), :poll, [])
{:ok, state}
end
def handle_info(:poll, state) do
Process.send_after(self(), :poll, state.blockchain.poll_interval_ms)
NewHeads.NewHeadFetcher.check(state.blockchain.id)
{:noreply, state}
end
end