#!/usr/bin/python3

import select, socket, sys, time

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('0.0.0.0', 62863))

for ip in sys.argv[1:]:
    s.sendto(b'', (ip, 9))

ips = set(sys.argv[1:])
ips_left = set(sys.argv[1:])
timeout = 0.2
deadline = 0

while ips_left:
    while select.select([s], [], [], max(deadline - time.time(), 0))[0]:
        data, sender = s.recvfrom(2**16)
        if sender[0] in ips and len(data) > 1 and data[0] == 52:
            print(sender[0])
            msg = data[:2+2*data[1]] + bytes([57, 0])
            for x in range(5):
                if x:
                    time.sleep(0.02)
                s.sendto(msg + bytes([57, 0]), sender)
            ips_left.discard(sender[0])
        if not ips_left:
            break

    for ip in ips_left:
        s.sendto(b'', (ip, 9))

    deadline = time.time() + timeout
    timeout *= 1.4
