| import socket | |
| from rich.console import Console | |
| import logging | |
| logger = logging.getLogger(__name__) | |
| console = Console() | |
| class SocketSender: | |
| """ | |
| Handles sending generated audio packets to the clients. | |
| """ | |
| def __init__(self, stop_event, queue_in, host="0.0.0.0", port=12346): | |
| self.stop_event = stop_event | |
| self.queue_in = queue_in | |
| self.host = host | |
| self.port = port | |
| def run(self): | |
| self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
| self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) | |
| self.socket.bind((self.host, self.port)) | |
| self.socket.listen(1) | |
| logger.info("Sender waiting to be connected...") | |
| self.conn, _ = self.socket.accept() | |
| logger.info("sender connected") | |
| while not self.stop_event.is_set(): | |
| audio_chunk = self.queue_in.get() | |
| self.conn.sendall(audio_chunk) | |
| if isinstance(audio_chunk, bytes) and audio_chunk == b"END": | |
| break | |
| self.conn.close() | |
| logger.info("Sender closed") | |