socket_sender.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import socket
  2. from rich.console import Console
  3. import logging
  4. logger = logging.getLogger(__name__)
  5. console = Console()
  6. class SocketSender:
  7. """
  8. Handles sending generated audio packets to the clients.
  9. """
  10. def __init__(self, stop_event, queue_in, host="0.0.0.0", port=12346):
  11. self.stop_event = stop_event
  12. self.queue_in = queue_in
  13. self.host = host
  14. self.port = port
  15. def run(self):
  16. self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  17. self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  18. self.socket.bind((self.host, self.port))
  19. self.socket.listen(1)
  20. logger.info("Sender waiting to be connected...")
  21. self.conn, _ = self.socket.accept()
  22. logger.info("sender connected")
  23. while not self.stop_event.is_set():
  24. audio_chunk = self.queue_in.get()
  25. self.conn.sendall(audio_chunk)
  26. if isinstance(audio_chunk, bytes) and audio_chunk == b"END":
  27. break
  28. self.conn.close()
  29. logger.info("Sender closed")