Skip to content

Instantly share code, notes, and snippets.

@alexnsolo
Created May 9, 2016 16:50
Show Gist options
  • Save alexnsolo/8686f652cfe1008bba393b6cee9cd223 to your computer and use it in GitHub Desktop.
Save alexnsolo/8686f652cfe1008bba393b6cee9cd223 to your computer and use it in GitHub Desktop.
defmodule AcmeUdpLogger.MessageReceiver do
use GenServer
require Logger
def start_link(opts \\ []) do
GenServer.start_link(__MODULE__, :ok, opts)
end
def init (:ok) do
{:ok, _socket} = :gen_udp.open(21337)
end
# Handle UDP data
def handle_info({:udp, _socket, _ip, _port, data}, state) do
message = parse_packet(data)
Logger.info "Received a secret message! " <> inspect(message)
{:noreply, state}
end
# Ignore everything else
def handle_info({_, _socket}, state) do
{:noreply, state}
end
def parse_packet(data) do
<<
_header :: size(240), # 30 bytes * 8 = 240 bits
priority_code :: bitstring-size(8),
agent_number :: little-unsigned-integer-size(32),
message :: bitstring-size(320)
>> = data
message = %{
priority_code: priority_code,
agent_number: agent_number,
message: String.rstrip(message),
}
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment