Example #1
0
def serverListener(receiver, metaPacket):

    print('listening...')
    while (True):
        try:
            message, addr = receiver.recvfrom(buffSize)
            typ, data = lib.breakPacket(message)
            print(typ)
            if (typ == "SUB"):
                print("sub baru nih")
                receiver.sendto(metaPacket, addr)
                subscribers.append(addr)
            elif (typ == "ANC"):
                print('hiyahiya flooded boi')
                receiver.sendto(lib.createPacket("ANC", ""), addr)

        except:
            print("error")

        if (time.time() > timeout):
            break
def subscribe(addr: Tuple[str, int],
              sock: socket.socket,
              q: queue.Queue,
              time_limit: int = 300,
              buff_size=32774):

    # Get port from adress
    port = addr[1]
    new_addr: Tuple[str, int]

    # Autodiscover using broadcast
    que = queue.Queue()
    discovered = False
    while not discovered:
        try:
            sock.sendto(lib.createPacket("ANC", ''), ('<broadcast>', port))
            sock.settimeout(0.2)
            logging.info(f'Broadcasted packet to port {port}')

            fromreceiver, ad = sock.recvfrom(buff_size)
            typ, _ = lib.breakPacket(fromreceiver)
            discovered = True
            logging.info(f'Received from {ad[0]}')

            if (typ == 'ANC'):
                que.put(ad)
                que.task_done()
        except Exception as e:
            print(e)
            pass

    if (que.empty()):
        logging.info('No server was found')
        exit()

    new_addr = que.get()
    logging.info(f'Server found at {new_addr[0]}:{new_addr[1]}')

    # Create subscription packet to server
    subPacket = lib.createPacket("SUB", "")

    # WAV related data [sampwidth, nchannel, framerate, frame_count, filename]
    wav_metadata = []

    # Wait for META (0x1) packet
    timeout = time.time() + time_limit
    logging.info(f'Getting information from {new_addr[0]}:{new_addr[1]}')
    while (time.time() <= timeout):
        # Send SUB (0x2) packet to server
        sock.sendto(subPacket, new_addr)

        logging.debug("Waiting for audio metadata")
        sock.settimeout(2)
        try:
            # Receive packet from server
            fromreceiver, _ = sock.recvfrom(buff_size)
            typ, data = lib.breakPacket(fromreceiver)

            # If received packet has type META (0x1)
            if (typ == "META"):
                logging.debug('Metadata received')
                wav_metadata = data.copy()
                return wav_metadata

        except socket.timeout:
            logging.warning("Timeout!")
        except ConnectionResetError:
            logging.warning("No receiver detected!")
            time.sleep(1)

    return wav_metadata
Example #3
0
receiver.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
receiver.bind(("", port))

print(socket.gethostbyname(socket.gethostname()))

# Open the WAV file
wf = wave.open(filename, 'rb')

metadata = [
    wf.getsampwidth(),
    wf.getnchannels(),
    wf.getframerate(),
    wf.getnframes(), filename
]

metaPacket = lib.createPacket("META", metadata)

t = Thread(target=serverListener, args=(receiver, metaPacket), daemon=True)
t.start()

data = wf.readframes(chunk)

chunks = []

while data != b'':
    chunks.append(data)
    data = wf.readframes(chunk)

siz = len(chunks)

time.sleep(3)
Example #4
0
                q.put(payload)
                run = False
                break
        except:
            print("error")

        if (time.time() > timeout):
            break


buffSize = 32767 + 7
sock = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
timeout = time.time() + 60 * 5

subPacket = lib.createPacket("SUB", "")

sampwidth = 0
nchannel = 0
framerate = 0

run = True
while (run):
    sock.sendto(subPacket, addr)
    print("menunggu...")
    sock.settimeout(2)
    try:
        fromreceiver, _ = sock.recvfrom(buffSize)
        typ, data = lib.breakPacket(fromreceiver)
        print(typ)
        print(data)