Packages
elixium_core
0.3.3
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
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 GenServer.call(:"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, 31014, [: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()
GenServer.call(:"Elixir.Elixium.Store.PeerOracle", {:reorder_peers, [ip]})
{:noreply, state}
end
def handle_info({:tcp, _, _}, state), do: {:noreply, state}
end