fred-dev/comfy_ui_ali
0
1from app.logger import on_flush2import os3import shutil4 5 6class TerminalService:7 def __init__(self, server):8 self.server = server9 self.cols = None10 self.rows = None11 self.subscriptions = set()12 on_flush(self.send_messages)13 14 def get_terminal_size(self):15 try:16 size = os.get_terminal_size()17 return (size.columns, size.lines)18 except OSError:19 try:20 size = shutil.get_terminal_size()21 return (size.columns, size.lines)22 except OSError:23 return (80, 24) # fallback to 80x2424 25 def update_size(self):26 columns, lines = self.get_terminal_size()27 changed = False28 29 if columns != self.cols:30 self.cols = columns31 changed = True32 33 if lines != self.rows:34 self.rows = lines35 changed = True36 37 if changed:38 return {"cols": self.cols, "rows": self.rows}39 40 return None41 42 def subscribe(self, client_id):43 self.subscriptions.add(client_id)44 45 def unsubscribe(self, client_id):46 self.subscriptions.discard(client_id)47 48 def send_messages(self, entries):49 if not len(entries) or not len(self.subscriptions):50 return51 52 new_size = self.update_size()53 54 for client_id in self.subscriptions.copy(): # prevent: Set changed size during iteration55 if client_id not in self.server.sockets:56 # Automatically unsub if the socket has disconnected57 self.unsubscribe(client_id)58 continue59 60 self.server.send_sync("logs", {"entries": entries, "size": new_size}, client_id)61 