ChatPersonas/Controlador.py

51 lines
2.0 KiB
Python

import threading
from Modelo import ModeloCliente
from server import start_server
class ControladorChat:
def __init__(self, vista):
self.vista = vista
self.modelos = {}
def iniciar_servidor(self):
"""Inicia el servidor en un hilo separado."""
threading.Thread(target=start_server, daemon=True).start()
#vista.mostrar_mensaje("[SERVIDOR] Servidor iniciado en segundo plano...\n")
def enviar_mensaje(self, host):
"""Envía un mensaje al servidor y lo muestra en el chat."""
if host in self.modelos:
mensaje = self.vista.chats_frames[host]["entry"].get()
if mensaje:
self.vista.mostrar_mensaje(host, f"[TÚ] {mensaje}")
self.modelos[host].enviar_mensaje(mensaje)
self.vista.chats_frames[host]["entry"].delete(0, 'end')
def actualizar_host_port(self):
"""Obtiene valores de host y port desde la interfaz y los actualiza en el modelo."""
host = self.vista.host_entry.get()
port = int(self.vista.port_entry.get())
self.modelo.set_host_port(host, port)
self.vista.mostrar_mensaje(f"[CONFIG] Host y puerto actualizados: {host}:{port}")
def conectar_cliente(self):
"""Conecta un nuevo cliente y agrega su botón en el menú."""
host = self.vista.host_entry.get()
port = int(self.vista.port_entry.get())
if host not in self.modelos:
modelo = ModeloCliente()
modelo.set_host_port(host, port)
mensaje = modelo.conectar(
on_message_received=lambda msg: self.vista.mostrar_mensaje(host, msg),
on_error=lambda err: self.vista.mostrar_mensaje(host, err)
)
if modelo.connected:
self.modelos[host] = modelo
self.vista.agregar_boton_chat(host)
self.vista.habilitar_envio(host)
self.vista.mostrar_mensaje(host, mensaje)