Packages
elixium_core
0.3.7
0.6.3
0.6.2
0.6.1
0.6.0
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.19
0.3.18
0.3.17
0.3.16
0.3.15
0.3.14
0.3.13
0.3.12
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.1
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.4
0.1.3
The core package for the Elixium blockchain, containing all the modules needed to run the chain
Current section
Files
Jump to
Current section
Files
lib/p2p/host_availability/host_check.ex
defmodule Elixium.HostCheck do
alias Elixium.Store.Oracle
use GenServer
require IEx
require Logger
def start_link(_args) do
GenServer.start_link(__MODULE__, [], name: __MODULE__)
end
def init([]) do
Process.send_after(self(), :check_health, 1000)
{:ok, %{}}
end
def handle_info(:check_health, state) do
case Oracle.inquire(:"Elixir.Elixium.Store.PeerOracle", {:load_known_peers, []}) do
:not_found -> :ok
peers -> Enum.each(peers, &attempt_response/1)
end
Process.send_after(self(), :check_health, 600000)
{:noreply, state}
end
defp attempt_response({ip, _port}) do
with {:ok, socket} <- :gen_tcp.connect(ip, 31015, [:binary, active: true], 1000) do
:gen_tcp.send(socket, <<0>>)
end
end
def handle_info({:tcp_closed, _}, state) do
{:noreply, state}
end
def handle_info({:tcp, socket, <<1>>}, state) do
#Shuffle List
{:ok, {add, _port}} = :inet.peername(socket)
ip =
add
|> :inet_parse.ntoa()
Oracle.inquire(:"Elixir.Elixium.Store.PeerOracle", {:reorder_peers, [ip]})
{:noreply, state}
end
def handle_info({:tcp, _, _}, state), do: {:noreply, state}
end