require 'zlib'
require 'ffi-rzmq'
require 'json'
require 'pry-byebug'

trap "SIGINT" do
  puts "Quitting"
  exit 130
end

EDDN_RELAY   = 'tcp://eddn.edcd.io:9500'
EDDN_TIMEOUT = 60000

context    = ZMQ::Context.new
subscriber = context.socket(ZMQ::SUB)

subscriber.setsockopt(ZMQ::SUBSCRIBE, "")

while true do
  begin
    subscriber.connect(EDDN_RELAY)
    puts "Connected to EDDN"

    poller = ZMQ::Poller.new()
    poller.register(subscriber, ZMQ::POLLIN)

    while true do
      socks = poller.poll(EDDN_TIMEOUT)

      if socks
        msg     = ZMQ::Message.new()
        message = subscriber.recvmsg(msg, ZMQ::DONTWAIT)
        message = Zlib::Inflate.inflate(msg.copy_out_string)
        json    = JSON.parse(message)
        puts json
      else
        puts "Disconnected from EDDN (After timeout)"
        subscriber.disconnect(EDDN_RELAY)
        break
      end
    end

  rescue StandardError => e
    puts "Disconnect from EDDN (After receiving ZMQError)"
    puts "ZMQSocketException: #{e}"
    subscriber.disconnect(EDDN_RELAY)
    sleep(10)
  end
end