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
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)
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)