diff --git a/chat_logic.py b/chat_logic.py new file mode 100644 index 0000000..7125031 --- /dev/null +++ b/chat_logic.py @@ -0,0 +1,67 @@ +import os +import json +import time +import threading + +CHAT_FILE = "global_chat.json" + +class ChatNetwork: + def __init__(self, ui_callback): + self.ui_callback = ui_callback + self.my_pid = os.getpid() + self.is_running = True + self.last_read_index = 0 + + if not os.path.exists(CHAT_FILE): + with open(CHAT_FILE, 'w') as f: + json.dump([], f) + + def start_server(self): + """Inicia el hilo que lee el chat constantemente.""" + threading.Thread(target=self._monitor_chat, daemon=True).start() + + def _monitor_chat(self): + """Lee el archivo global y muestra solo los mensajes nuevos.""" + while self.is_running: + try: + if os.path.exists(CHAT_FILE): + with open(CHAT_FILE, 'r') as f: + messages = json.load(f) + + if len(messages) > self.last_read_index: + new_msgs = messages[self.last_read_index:] + + for msg in new_msgs: + mi_prefijo = f"PID {self.my_pid}:" + + if msg.startswith(mi_prefijo): + mensaje_visual = msg.replace(mi_prefijo, "Yo:") + else: + mensaje_visual = msg + + self.ui_callback(mensaje_visual) + + self.last_read_index = len(messages) + except Exception: + pass + time.sleep(0.5) + + def send_message(self, message): + """AƱade un mensaje al archivo global.""" + try: + if os.path.exists(CHAT_FILE): + with open(CHAT_FILE, 'r') as f: + data = json.load(f) + else: + data = [] + + data.append(f"PID {self.my_pid}: {message}") + + with open(CHAT_FILE, 'w') as f: + json.dump(data, f) + return True + except Exception: + return False + + def stop(self): + self.is_running = False \ No newline at end of file