Lógica del chat
This commit is contained in:
parent
384c99cb4a
commit
22d3fb98ff
|
|
@ -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
|
||||
Loading…
Reference in New Issue