Current section
Files
Jump to
Current section
Files
lib/influx_sender.ex
defmodule UDPFlux.Sender do
use GenServer
def write_point(pid, point) do
GenServer.cast(pid, {:write_point, point})
end
def start_link(server) do
# Expects server-hash: %{ip: {"127.0.0.1"}, port: 4444}
GenServer.start_link(__MODULE__, server)
end
def init(server) do
# Initialize UDP-Socket to random port
{:ok, socket} = :gen_udp.open(0)
# We parse a elixir string containing an ip-adress to an erlang compatible
# representation
{:ok, ip} = :inet.parse_address(String.to_char_list(server.ip))
{:ok, %{server: %{ip: ip, port: server.port}, socket: socket}}
end
def handle_cast({:write_point, point}, %{socket: socket, server: server}) do
binary_representation = UDPFlux.DataPoint.dump(point)
send_buffer(binary_representation, socket, server)
{:noreply, %{socket: socket, server: server}}
end
def send_buffer(buffer, socket, server) do
:gen_udp.send(socket, server.ip, server.port, buffer)
end
end